javascript - 从 JSON 数组中拼接或删除元素列表,仅删除偶数项而不是匹配项

标签 javascript jquery angularjs arrays json

我有一个来自 REST API 的 JSON 数组输出,如下所示,我使用 ng-repeat 在 HTML 上显示此项目。

    var searchresponse = [{
"items": [{
    "employeeId": "ABC",
    "type": "D",
    "alive": "Yes"

}, {
    "employeeId": "DEF",
    "type": "D",
    "alive": "Yes"

}, {
    "employeeId": "NPK",
    "type": "D",
    "alive": "Yes"

}, {
    "employeeId": "PKN",
    "type": "A",
    "alive": "Yes"
}],
"more": false
}];

当用户尝试使用全选/单选删除时,我正在调用 REST API 以从数据库中删除员工 ID。一旦我得到成功的响应,我计划拼接/删除用户从 View 中选择的值。我想删除以下员工 ID 及其类型,从搜索响应中删除

    var data1=["ABC","NPK","PKN"];

我尝试这样做

var data1=["ABC","NPK"];
var items=searchresponse[0].items;
for(i in items){
if(data1.indexOf(items[i].employeeId)!=-1){
    items.splice(i,1);
}
}
console.log(searchresponse[0].items);

实际发生的情况是,它仅删除了偶数编号的项目,例如:它删除了 ABC,PKN 。 (它正在删除列表中的第 0 个、第 2 个、第 4 个项目。留下第 1 个、第 3 个项目等)。我在这里缺少什么

最佳答案

问题是当您从数组中删除该项目时,数组中其他项目的索引会向左移动。

假设数组中有 4 个项目 ([a, b, c, d]),并且您要删除第一个项目,因此 i=0 然后是结果第二次迭代中的数组将是 [b,c,d] 并且 i 将是 i=1 现在实际上你已经错过了 b 在循环中

var searchresponse = [{
  "items": [{
    "employeeId": "ABC",
    "type": "D",
    "alive": "Yes"

  }, {
    "employeeId": "DEF",
    "type": "D",
    "alive": "Yes"

  }, {
    "employeeId": "NPK",
    "type": "D",
    "alive": "Yes"

  }, {
    "employeeId": "PKN",
    "type": "A",
    "alive": "Yes"
  }],
  "more": false
}];

var data1 = ["ABC", "NPK", "PKN"];

var data1 = ["ABC", "NPK"];
var items = searchresponse[0].items;
for (var i = items.length - 1; i >= 0; i--) {
  if (data1.indexOf(items[i].employeeId) != -1) {
    items.splice(i, 1);
  }
}
console.log(searchresponse[0].items);

关于javascript - 从 JSON 数组中拼接或删除元素列表,仅删除偶数项而不是匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41177208/

相关文章:

javascript - Nodejs MySQL : Accessing variable in another route

javascript - 智能 : Live Template to replace callback function with an es6 array function

JQuery Ajax PUT 请求不向服务器发送数据

angularjs - 将 Angular 路由与往返路由一起使用

javascript - 最短路径算法js报错

javascript - 函数 elm(obj){ return document.getElementById(obj); }

javascript - 如何将数组传递到html表格最后一行

javascript - 如何使用 css 类验证请求

javascript - Chart.js 不适用于 Angular 1.5?

css - AngularJS 表格进入/离开动画