我正在尝试解决一个 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 循环。我猜要么我的做法完全错误,要么我只需要做一个简单的调整就可以解决测试问题。感谢您的帮助。
最佳答案
要实现 ["head", "shoulders", "claw", "tentacle", "knees", "toes"]
作为你函数的结果,你只需要改变您的返回
到:
返回 [...vArr2, ...slice1, ...endBits];
。
如果你的目标是让你的函数尽可能短,你可以使用一个衬里:
const frankenSplice = (arr1, arr2, n) => [ ...arr2.slice(0, n), ...arr1, ...arr2.slice(n)];
关于javascript - 在不修改原件的情况下将一个数组切片/拼接成另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55871856/