簡體   English   中英

將一個數組切片/拼接為另一個數組,而無需修改原始數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM