如何删除或过滤数组中的特定对象

Dan*_*ilo 3 javascript arrays filter node.js

有人可以帮助我解决这个问题吗?在特定条件之后,我有一个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));

Run Code Online (Sandbox Code Playgroud)

我希望这是我必须删除状态为true的所有对象以及父对象“ date”的地方。寻找“ 2019-10-16 03:19:05”,我不想删除它,因为有一个对象尚不存在“状态为真” ...而“ 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
             }
          ]
       }
    ]
 }
Run Code Online (Sandbox Code Playgroud)

Van*_*esh 6

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

var result = obj.requests.filter(x => !x.req.every(y => y.status));
Run Code Online (Sandbox Code Playgroud)

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

var result = obj.requests.filter(x => !x.req.every(y => y.status));
Run Code Online (Sandbox Code Playgroud)

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

obj.requests = result;
Run Code Online (Sandbox Code Playgroud)