首页 > 解决方案 > 按索引删除数组项

问题描述

我想通过索引数组从数组中删除多个项目。

const indexes = [0, 1, 3];
const values = [0, 1, 2, 3, 4, 5];

indexes.forEach((idx) => {
  values.splice(idx, 1);
});

console.log(values);

第二次循环时,索引错误,因为数组较短。

我应该怎么做,结果会是[2, 4, 5]什么?

标签: javascriptarrays

解决方案


您在迭代数组时从数组中删除项目,这是一个问题,因为在删除第一个元素后,它后面的所有元素都不再位于indexes指向的相同索引处。改为过滤数组:

const indexes = [0, 1, 3];
const values = [0, 1, 2, 3, 4, 5];

const filtered = values.filter((_, i) => !indexes.includes(i));
console.log(filtered);

如果您必须改变现有数组,请向后退,以便首先删除最高索引:

const indexes = [0, 1, 3];
const values = [0, 1, 2, 3, 4, 5];

for (const index of indexes.sort((a, b) => b - a)) {
  values.splice(index, 1);
}

console.log(values);


推荐阅读