我对这个问题的解决方案效率低下吗? (freecodecamp)

时间:2018-10-08 23:55:32

标签: javascript

尽管FreeCodeCamp不接受答案,但是代码似乎可以提供我想要的结果。显然,他们的代码看起来更好/更紧凑,除此之外,按照我的方式进行操作是否还会有其他缺点?也许是明智的表现?

简介/目标

为您提供了两个数组和一个索引。

使用数组方法slice和splice将第一个数组的每个元素依次复制到第二个数组中。

开始在第二个数组的索引n处插入元素。

返回结果数组。函数运行后,输入数组应保持不变。

我的代码

function frankenSplice(arr1, arr2, n) {
 let arr3 = arr2.slice(0, n);
 let arr4 = arr2.slice(n);
 arr3.push(arr1);
 arr3.push(arr4);
 return arr3;
}

他们的解决方案

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;

}

1 个答案:

答案 0 :(得分:0)

在创建数组数组时,代码不被接受。这两个功能做不同的事情。如果要串联数组,则应使用Array.prototype.concat而不是.push方法:

function frankenSplice(arr1, arr2, n) {
  let arr3 = arr2.slice(0, n);
  let arr4 = arr2.slice(n);
  return arr3.concat(arr1, arr4);
}

但是您的函数仍然不使用Array.prototype.splice方法。一种选择是:

function frankenSplice(arr1, arr2, n) {
  let ret = arr2.slice();
  ret.splice(n, 0, ...arr1);
  // or: [].splice.apply(ret, [n, 0].concat(arr1));
  return ret;
}

上述功能的精简版:

function frankenSplice(a, b, n) {
  [].splice.apply(b = b.slice(), [n, 0, ...a]);
  return b;
}