javascript - 如何删除或过滤数组中的特定对象
问题描述
有人可以帮我解决这个问题吗?我有一个在特定条件后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
}
]
}
]
}
解决方案
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;
推荐阅读
- c# - Couchbase:为什么从 Couchbase SDK 检索时任何时区都会自动转换为本地时区
- python - 在张量流中找到两个边界框的交集?
- c++ - 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- java - 在 Apache Flink 1.4 中模拟 ListState
- swift - 无法使用类型为“(ofClasses:[NSObject.Type],来自:Data)”的参数列表调用“unarchiveObject”
- c - 在 C 中与 flex 相乘时,间接需要指针
- vue.js - VueJS - 在一种方法中访问多个数据
- c# - 在具有奇怪行为的异步选择语句中限制并行任务执行
- regex - 如何删除 emeditor 中的一些字符串(正则表达式)
- url-routing - laravel - 动态路由组前缀作为角色