首页 > 解决方案 > 如何删除或过滤数组中的特定对象

问题描述

有人可以帮我解决这个问题吗?我有一个在特定条件后object/array放置对象的位置。"status = true"现在,我的问题是,当所有子对象都为真时,我想删除这些对象和父对象。我将举一个这个问题的例子。

function removeProp(obj, propToDelete,value) {
    for (var property in obj) {
            if (obj.hasOwnProperty(property)) {
                if (typeof obj[property] == "object") {
                    removeProp(obj[property],propToDelete,value);
                } else {
                if(property === propToDelete && obj[property] == value){
                    delete obj[property];
                    //delete obj;
                    }
                }
            }
     }
}

var obj = 
{
    "name":"Bank Branch 1",
    "requests":[
       {
          "date":"2019-10-16 03:18:02",
          "req":[
             {
                "amount":"300",
                "coin":2
             },
             {
                "amount":"500",
                "coin":5
             }
          ]
       },
       {
          "date":"2019-10-16 03:19:05",
          "req":[
             {
                "amount":"300",
                "coin":2,
                "status":true
             },
             {
                "amount":"500",
                "coin":5
             }
          ]
       },
       {
          "date":"2019-10-16 03:19:20",
          "req":[
             {
                "amount":"22",
                "coin":2,
                "status":true
             },
             {
                "amount":"111",
                "coin":5,
                "status":true
             }
          ]
       }
    ]
 }
console.log(JSON.stringify(obj));
removeProp(obj,"status",true);
console.log(JSON.stringify(obj));

我希望这个,我必须删除所有状态为真的对象,以及父“日期”。寻找“2019-10-16 03:19:05”,我不想删除它,因为有一个对象还没有“status true”......和“2019-10-16 03: 19:20" 被删除,因为所有对象都是真实的。

var obj = 
{
    "name":"Bank Branch 1",
    "requests":[
       {
          "date":"2019-10-16 03:18:02",
          "req":[
             {
                "amount":"300",
                "coin":2
             },
             {
                "amount":"500",
                "coin":5
             }
          ]
       },
       {
          "date":"2019-10-16 03:19:05",
          "req":[
             {
                "amount":"300",
                "coin":2,
                "status":true
             },
             {
                "amount":"500",
                "coin":5
             }
          ]
       }
    ]
 }

标签: javascriptarraysnode.jsfilter

解决方案


Array.filter()您可以使用和Array.every()像这样将结果过滤到另一个数组中-

var result = obj.requests.filter(x => !x.req.every(y => y.status));

运行下面的代码片段以检查控制台中的结果。

var obj = 
{
    "name":"Bank Branch 1",
    "requests":[
       {
          "date":"2019-10-16 03:18:02",
          "req":[
             {
                "amount":"300",
                "coin":2
             },
             {
                "amount":"500",
                "coin":5
             }
          ]
       },
       {
          "date":"2019-10-16 03:19:05",
          "req":[
             {
                "amount":"300",
                "coin":2,
                "status":true
             },
             {
                "amount":"500",
                "coin":5
             }
          ]
       },
       {
          "date":"2019-10-16 03:19:20",
          "req":[
             {
                "amount":"22",
                "coin":2,
                "status":true
             },
             {
                "amount":"111",
                "coin":5,
                "status":true
             }
          ]
       }
    ]
 }

var result = obj.requests.filter(x => !x.req.every(y => y.status));

console.log(result);

然后只需将requests属性替换为新创建的数组即可。

obj.requests = result;

推荐阅读