从嵌套对象数组中删除元素

时间:2018-04-06 16:48:59

标签: javascript jquery angularjs

我想使用angularjs / jQuery从JSON对象中删除基于条件检查的对象。 我尝试使用下面的代码,但输出不是预期的。

演示:https://plnkr.co/edit/EWwbETITqn7G79Xypt0g?p=preview

angular.module('ui.bootstrap.demo').controller('DataCtrl', function ($scope) {
  $scope.responseData = {
    "data": [{
      "name": "Machine", "quantity": 20, "snVal": 22,
      "machine1": [{ "id": 2009, "machineName": "ASD1", "trackID": "34219", "status": "delivered" },
      { "id": 27893, "machineName": "PX20AA", "trackID": "3422", "status": "avail" }],
      "machine2": [{ "id": 1023, "machineName": "XY22", "trackID": "1345", "status": "avail" },
      { "id": 1233, "machineName": "PP3DF", "trackID": "112", "status": "delivered" }
      ]
    }]
  }
  console.log("R1 :: " + JSON.stringify($scope.responseData));
  $scope.newResponse = $.grep($scope.responseData.data, function (element, index) { return element.status == "delivered" }, true);
  console.log("R2 after removing elements:: " + JSON.stringify($scope.newResponse));
});

1 个答案:

答案 0 :(得分:0)

试试这个,



let responseData = { "data": [{ "name": "Machine", "quantity": 20, "snVal": 22, "machine1": [{ "id": 2009, "machineName": "ASD1", "trackID": "34219", "status": "delivered" }, { "id": 27893, "machineName": "PX20AA", "trackID": "3422", "status": "avail" }], "machine2": [{ "id": 1023, "machineName": "XY22", "trackID": "1345", "status": "avail" }, { "id": 1233, "machineName": "PP3DF", "trackID": "112", "status": "delivered" }] }] } ;

let newResponse = responseData;
    newResponse.data.forEach(function (item) {
      for (j in item) {
        if (j.includes("machine")) {
      //better you check if type is array, using Object.prototype.toString.call(j) === "[object Array]"
          item[j] = item[j].reduce(function (acc, machine) {
            if (machine.status !== "delivered"){
              acc.push(machine);
            }
            return acc;
          }, []);
        }
      }
    })|
console.log(newResponse);




这里我们只是迭代数据字段中的所有对象。由于像machine1,machine2这样的属性是一个数组,我们遍历它并过滤掉所有未交付的机器。

您必须注意我在这里使用了for-in循环和数组reduce()方法。

相关问题