javascript - 如何通过在 Javascript 中循环从数组中删除多个项目

标签 javascript

所以,我有一个包含多个值的 javascript 数组:

var keymap = {'name': 'foobaz', 
              'mappings': [{'id': 1, 'key': 'b'},
                          {'id': 2, 'key': 'c'},
                          {'id': 3, 'key': 'd'},
                          {'id': 1, 'key': 'e'},
                          {'id': 10, 'key': 'f'},
                          {'id': 7, 'key': 'g'},
                          {'id': 1, 'key': 'h'}]
}

我想删除键为“b”的所有条目。请注意,这些 ID 对应于后端 ID。我想要做的是删除一些映射(例如,所有“id”为“1”)。

我试过的是:

for (var i = 0; i < keymap['mappings'].length; i++) {
    if (keymap['mappings'][i]['id'] === id_to_match) {
        keyboard_map['mappings'].splice(i, 1);
    }
}

但是,slice 会就地改变数组的索引,因此现在 i 不会指向正确的索引点(因为任何更高的索引现在都是 i-n 其中 n 是之前完成的切片数。

实现这个的正确方法是什么?

最佳答案

一个简单的方法是递减迭代器(这是有效的,因为你每次迭代都读取长度 - 所以确保你避免缓存长度)

for (var i = 0; i < keymap['mappings'].length; i++) {
 if (keymap['mappings'][i]['id'] === id_to_match) {
    keyboard_map['mappings'].splice(i, 1);
    i--;
 }
}

关于javascript - 如何通过在 Javascript 中循环从数组中删除多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19520662/

相关文章:

javascript - 在浏览器调整大小(视口(viewport)宽度)时动态添加类

javascript - 尝试使用 'for' 循环构建数组

javascript - 网站实时测试

javascript - antd 上传控件需要 action 函数,但我不需要它

javascript - 未调用组合框事件

javascript - 用于 Javascript 对象的位移运算符

javascript - Coffeescript/Javascript 中数组中的字符串与换行符连接

javascript - 在谷歌地图信息窗口中嵌入推文

javascript - 如何为 Angular 2 中的特定路由实现 RouteReuseStrategy shouldDetach

javascript - 如何使用值数组作为参数发出原型(prototype) ajax 请求?