簡體   English   中英

使用for循環從數組中拼接多個元素

[英]splice multiple elements from an array using for loop

我想拼接數組的多個索引,這是我的代碼示例:

  let arrayA = ["aa","bb","cc","dd","ee","ff","gg","hh"]; let arrrayIndexSplice = [0,1,3]; let test = null; for (let i of arrrayIndexSplice) { test = arrayA.splice(i,1); } console.log(arrayA); 

預期結果為[“ cc”,“ ee”,“ ff”,“ gg”,“ hh”];

實際結果是[“ bb”,“ dd”,“ ee”,“ gg”,“ hh”]

拼接時,所有后續值的索引都會減少。 因此,拼接出最后一個:

let arrrayIndexSplice = [0, 1, 3];
for (let i of arrrayIndexSplice.sort().reverse()) {
 arrayA.splice(i, 1);
}

或者只是過濾器:

 arrayA = arrayA.filter((_, i) => !arrayIndexSplice.includes(i));

您應該從結尾開始,我-讓我們嘗試跟隨

let arrayA=["aa","bb","cc","dd","ee","ff","gg","hh"];
let arrrayIndexSplice=[0,1,3];
for (let i=arrrayIndexSplice.length-1;i>=0;i--){arrayA.splice(arrrayIndexSplice[i],1)}

問題可能是您以升序遍歷數組。 因此,當您拼接第一個元素時,其他元素的索引也會改變。 數組上的負迭代可能會有所幫助。

let arrayA=["aa","bb","cc","dd","ee","ff","gg","hh"];
let arrrayIndexSplice=[0,1,3];
for (let i=arrrayIndexSplice.length-1; i > -1; i--){arrayA.splice(i,1)}

您可以過濾出所有要排除索引的元素。

 let arrayA = ["aa", "bb", "cc", "dd", "ee", "ff", "gg", "hh"]; let arrrayIndexSplice = [0, 1, 3]; arrayA = arrayA.filter((item, index)=> !arrrayIndexSplice.includes(index)); console.log(arrayA); 

我的想法是用特殊字符或字符串替換該索引中的項目,然后再次使用replace刪除該特殊字符或字符串:

 let arrayA = ["aa", "bb", "cc", "dd", "ee", "ff", "gg", "hh"]; let arrrayIndexSplice = [0, 1, 3]; let test = null; arrayA.forEach((val, index) => { if(arrrayIndexSplice.includes(index)){ arrayA[index] = '##'; } }); arrayA = arrayA.join(',').replace(/##,/g, '').split(','); console.log(arrayA); 

在遍歷for of循環時,您會不斷更改數組本身,因此索引會在每個循環步移到右側

你的例子

arrayA: ["aa", "bb", "cc", "dd", "ee", "ff", "gg", "hh"]
// start loop
// 1st iteration
// test = arrayA.splice(i,1);
test = 0
arrayA = ["bb", "cc", "dd", "ee", "ff", "gg", "hh"]  // index 0 removed

// 2nd iteration
// test = arrayA.splice(i,1);
test = 1
arrayA = ["bb", "dd", "ee", "ff", "gg", "hh"]  // index 1 removed

// 3rd iteration
// test = arrayA.splice(i,1);
test = 3
arrayA = ["bb", "dd", "ee", "gg", "hh"]  // index 3 removed

這有效:您需要獲取當前arrrayIndexSplice元素的索引,因此可以將拼接起始索引減少該數量

 console.clear() let arrayA = ["aa", "bb", "cc", "dd", "ee", "ff", "gg", "hh"]; let arrrayIndexSplice = [0, 1, 3]; for (let k in arrrayIndexSplice) { if (arrrayIndexSplice.hasOwnProperty(k)) { arrayA.splice(arrrayIndexSplice[k]-k, 1) } } console.log(arrayA) 

這也起作用:它不適用於循環,但可以使用filter功能

 let arr = ["aa", "bb", "cc", "dd", "ee", "ff", "gg", "hh"]; let indices = [0,1,3] function filterIndices(arr, indices, swap = false) { return arr.filter((item, index, source) => { return swap ? !indices.includes(index) : indices.includes(index); }) } newArr = filterIndices(arr, indices, true) console.log(newArr) 

您可以使用以下代碼:

let arrayA = ["aa", "bb", "cc", "dd", "ee", "ff", "gg", "hh"];
let arrrayIndexSplice = [0, 1, 3];
for (let i of arrrayIndexSplice.length) {
  arrayA.splice(arrrayIndexSplice[i], 1)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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