我正在尝试从json对象返回一个数组。 每个对象都有一些数据和另一个嵌套的数组/对象
像这样:
{
"data": [
{
"name": "name",
"id": "id",
"amount": 4000,
"items": [
{
"number": 12,
"isAvailable": true,
},
{
"number": 15,
"isAvailable": true,
},
{
"number": 16,
"isAvailable": true,
},
{
"number": 17,
"isAvailable": true,
}
]
},
{
"name": "name2",
"id": "id2",
"amount": 3000,
"items": [
{
"number": 12,
"isAvailable": true,
},
{
"number": 15,
"isAvailable": true,
},
{
"number": 16,
"isAvailable": false,
},
{
"number": 17,
"isAvailable": true,
}
]
},
{
"name": "name4",
"id": "id4",
"amount": 1200,
"items": [
{
"number": 12,
"isAvailable": true,
},
{
"number": 15,
"isAvailable": true,
},
{
"number": 16,
"isAvailable": true,
},
{
"number": 17,
"isAvailable": true,
}
]
}
]
}
我要检查所有对象,并查看这些对象中是否有包含"isAvailable": false
的项目
如果某个项目不可用,则需要从数组中删除父对象(因此,不是项目数组,而是位于其上方的完整对象。
然后我要返回已删除该对象的数组。
我通过使用ES6 findIndex
array.findIndex(object => object.items.some(item => !item.isAvailable));
这将返回具有它的父数组的索引,我可以用它来拼接数组。但这仅适用于单个对象。如果我还有另一个对象,它将仍然返回第一个索引。
如何根据条件检查是否存在多个对象并将其从数组中删除?
答案 0 :(得分:1)
您可以使用.filter
代替.findIndex
,然后将数组重新分配给新的过滤数组:
const removed = data.filter(object => object.items.some(item => !item.isAvailable));
data = data.filter(item => !removed.includes(item));
如果您需要变异而不仅仅是重新分配,则可以在过滤时splice
:
const removed = data.filter(object => {
const toRemove = object.items.some(item => !item.isAvailable);
if (!toRemove) return false;
// Have to use `indexOf` rather than the second filter argument
// because the index of the object might change due to an earlier splice:
data.splice(data.indexOf(object), 1);
return true;
});