将一个数组切片/拼接为另一个数组,而无需修改原始数组

时间:2019-04-26 16:44:45

标签: javascript

我正在尝试解决一个freecodecamp挑战,其中一个数组必须在给定的索引下复制到另一个数组中,而无需更改原始数组。我想出了自己的解决方案,当我console.log();包装每个函数输入时,据我所知,我得到了期望的结果。但是,它没有通过测试。我没有使用for循环,而是试图使我的解决方案尽可能简单。我将同时显示我的解决方案及其解决方案。

下面是一些突出显示这两个代码的代码:

我的解决方案:

function frankenSplice(arr1, arr2, n) {
  var vArr1 = [...arr1];
  var vArr2 = [...arr2];

  var slice1 = vArr1.slice(0);
  var endBits = vArr2.splice(n);


  return [...vArr2, slice1, endBits];   
}

例如,frankenSplice(["claw", "tentacle"], ["head", "shoulders", "knees", "toes"], 2)应该返回["head", "shoulders", "claw", "tentacle", "knees", "toes"],并且据我所知,我何时使用控制台(尽管该规定未通过测试)。

他们的解决方案:

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

如果我可以在简单的逻辑行中做到这一点,我只是看不到需要使用for循环。我猜我要么完全错了,要么只需要做一个简单的调整即可解决测试。感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

要通过功能实现["head", "shoulders", "claw", "tentacle", "knees", "toes"],只需将return更改为: return [...vArr2, ...slice1, ...endBits];

如果您打算使功能尽可能短,则可以使用一根衬纸:

const frankenSplice = (arr1, arr2, n) => [ ...arr2.slice(0, n), ...arr1, ...arr2.slice(n)];

答案 1 :(得分:0)

这是我的解决方案:

function frankenSplice(arr1, arr2, n) {
  var vArr1 = [...arr1];
  var vArr2 = [...arr2];

  var slice1 = vArr1.slice(0);
  var endBits = vArr2.splice(n);


  return [...vArr2, ...slice1, ...endBits];   
}

也许for循环在某种程度上是更正确,更传统的方式,或者是更优雅的方式,但是我现在喜欢我的解决方案。 :)