javascript - 按索引删除数组项
问题描述
我想通过索引数组从数组中删除多个项目。
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]
什么?
解决方案
您在迭代数组时从数组中删除项目,这是一个问题,因为在删除第一个元素后,它后面的所有元素都不再位于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);
推荐阅读
- flutter - Flutter 在 ListTile 中的 'ontap' 事件上自动打开附加的 url
- r - 如何在 RMarkdown 中添加未缩进的项目符号
- lisp - 非破坏性修改哈希表
- c - 我想在汇编程序编程keil uVision 5中翻译这个upcode
- gitlab - Gitlab Runner 根据自定义变量在选定的跑步者上运行作业
- python - 不知道如何返回递归循环的最终结果
- python - 在轮廓中找到 x,y 的值
- flutter - Flutter Parse Server Sdk 未保存表中的第二个对象(类)
- visual-studio-code - Vscode - 如何将一些片段仅限制为空白文件?
- android - android studio 中的内存消耗