我正在尝试解决一个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循环。我猜我要么完全错了,要么只需要做一个简单的调整即可解决测试。感谢您的帮助。
答案 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循环在某种程度上是更正确,更传统的方式,或者是更优雅的方式,但是我现在喜欢我的解决方案。 :)