[英]Slice/Splice one array into another without modifying the originals
我正在嘗試解決一個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"]
,您只需將return
更改為: return [...vArr2, ...slice1, ...endBits];
。
如果您打算使功能盡可能短,則可以使用一根襯墊:
const frankenSplice = (arr1, arr2, n) => [ ...arr2.slice(0, n), ...arr1, ...arr2.slice(n)];
這是我的解決方案:
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循環在某種程度上是一種更正確,更常規的方法,或者更優雅的方法,但是我現在喜歡我的解決方案。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.