【问题标题】:Copy all elements of 1 array into a second array at a specific index in order按顺序将 1 个数组的所有元素复制到特定索引处的第二个数组中
【发布时间】:2020-10-20 15:33:10
【问题描述】:

我试图将 arr1 的元素复制到索引 n 处的 arr2 中。元素必须按照它们所在的确切顺序复制。当我向后循环箭头时,我可以让代码工作,但我无法通过测试,因为它不按顺序。

function frankenSplice(arr1, arr2, n) {
  let newArr = arr2.splice(" ");
  for(let i = 0; i < arr1.length;i++) {
      newArr.splice(n,0,arr1[i]);
  }
  return  console.log(newArr);
}

应该如何调用它的一个例子是frankenSplice([1, 2, 3], [4, 5, 6], 1);
预期输出为[4, 1, 2, 3, 5]
我不断收到[ 4, 1, 2, 3, 5, 6 ]

【问题讨论】:

  • 您的样本输入和预期输出是什么?
  • frankenSplice([1, 2, 3], [4, 5, 6], 1);预期输出为 [4, 1, 2, 3, 5]。我不断得到 [ 4, 1, 2, 3, 5, 6 ]
  • 这会产生什么?
  • 为什么6在预期的输出中被删除了?
  • 您的输出看起来正确。预期的输出似乎是frankenSplice([1, 2, 3], [4, 5], 1);

标签: javascript arrays algorithm


【解决方案1】:

您的输出向后退的原因是因为您一直在同一位置插入n。这会将前一个元素推到其后,因此它们以相反的顺序结束。如果每次循环都增加n,您将按顺序插入它们。

但不需要循环,使用扩展语法将所有 arr1 用作对 splice() 的单个调用中的参数。

function frankenSplice(arr1, arr2, n) {
  let newArr = [...arr2]; // make copy of arr2
  newArr.splice(n, 0, ...arr1); // splice arr1 into the copy
  return newArr;
}

console.log(frankenSplice([1, 2, 3], [4, 5, 6], 1));

我不明白你为什么不期望在输出中出现6

【讨论】:

    【解决方案2】:

    不确定为什么 6 会被删除,但可能是这样的:

    function frankenSplice(arr1, arr2, n) {
      let newArr = arr2
      newArr.splice(n+1)
      for(let i = arr1.length - 1; i >= 0; i--) {
          newArr.splice(n,0,arr1[i]);
      }
      return  console.log(newArr);
    }
    
    frankenSplice([1, 2, 3], [4, 5, 6], 1);

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多