如何在迭代时删除数组中的元素

时间:2018-08-06 06:05:03

标签: javascript

let k = ['adb','dc', 'asd', 'ew'];
let removeIndex = [0,2];

我正在努力尝试找出如何使用removeIndex中列出的索引以编程方式删除k中的元素。

let copy = k.slice();

removeIndex.forEach(i=> {
   copy.splice(i,1)
})

copy =>我没有得到想要的结果:['dc','ew']

5 个答案:

答案 0 :(得分:4)

我建议您避免使用splice-它会使副本 发生变异,而您依靠removeIndex的索引来继续与的索引相对应>原始数组。删除一个元素后,该元素将无法正常工作。

尝试改用.filter,并检查要迭代的当前项目的索引是否包含在removeIndex数组中:

let k = ['adb','dc', 'asd', 'ew'];
let removeIndex = [0,2];
const copy = k.filter((_, i) => !removeIndex.includes(i));
console.log(copy);

答案 1 :(得分:0)

在您使用[2,0]之前,您必须按降序对removeindex进行排序(在您的情况下为forEach

答案 2 :(得分:0)

如果removeIndex包含按升序排列的索引值,则可以按for元素的降序进行简单的removeIndex循环,以便从最后一个元素中删除最后一个元素copy数组。

let k = ['adb','dc', 'asd', 'ew'];
let removeIndex = [0,2];
let copy = k.slice();
for(var i=removeIndex.length-1; i>=0; i--){
   copy.splice(removeIndex[i],1);
}
console.log(copy);

答案 3 :(得分:-1)

使用ES6中的Array.filters尝试以下简单解决方案:

const words = ['adb','dc', 'asd', 'ew'];
const result = words.filter(word => word.length < 3);

console.log(result);
// expected output: ["dc", "ew"]

答案 4 :(得分:-1)

这是我必须创建的一个小功能,对我来说很好用。

例如:

let k = ['adb','dc', 'asd', 'ew'];
// you can get the length of the array
let length = k.length;
let array_splice = [];
for (let i = 0; i < length ; i++) {
   // you can add your condition here, then
   if (i % 2 == 1) {
       array_splice.push(k[i]);
   }
}
console.log(array_splice); // or return array_splice if you use it to a function;

希望对您有帮助 待会见