Javascript 如何从对象数组中删除满足条件的对象?
我在函数中收到一个包含以下信息的对象Javascript 如何从对象数组中删除满足条件的对象?,javascript,arrays,angular7,splice,arrayobject,Javascript,Arrays,Angular7,Splice,Arrayobject,我在函数中收到一个包含以下信息的对象 { "name": "Grand modèle", "description": "Par 10", "price": 0, "functional_id": "grand_modele_par_10", "quantity": 2, "amount": 0 } 我需要检查它所在的下一个对象数组以移除它 [ { "name": "Matériel crémation", "products": [
{
"name": "Grand modèle",
"description": "Par 10",
"price": 0,
"functional_id": "grand_modele_par_10",
"quantity": 2,
"amount": 0
}
我需要检查它所在的下一个对象数组以移除它
[
{
"name": "Matériel crémation",
"products": [
{
"file": "data:image/;base64,",
"name": "Sacs bordeaux",
"description": "Pour les crémations Référence",
"id": 12,
"path": "",
"items": [
{
"name": "Petit modèle",
"description": "Par 25",
"price": 0,
"functional_id": "petit_modele_par_25",
"quantity": 2,
"amount": 0
},
{
"name": "Grand modèle",
"description": "Par 10",
"price": 0,
"functional_id": "grand_modele_par_10",
"quantity": 2,
"amount": 0,
"itemAdded": false
}
]
}
]
},
{
"name": "Documents",
"products": [
{
"file": "data:image/;base64,",
"name": "Affiches procédure",
"description": "De prise en charge",
"id": 18,
"path": "",
"items": [
{
"price": 0,
"functional_id": "affiches_procedure",
"quantity": 1,
"amount": 0
}
]
}
]
}
]
public deleteItem(item) {
this.fullCartInfo.forEach(category => {
category.products.forEach(product => {
product.items.forEach(itemAdded => {
if (item.functional_id === itemAdded.functional_id) {
this.fullCartInfo.splice(itemAdded);
}
});
});
});
this.cartService.removeItem(item);
}
为此,我使用“forEach”遍历对象数组,找到满足相等条件的项并将其移除
[
{
"name": "Matériel crémation",
"products": [
{
"file": "data:image/;base64,",
"name": "Sacs bordeaux",
"description": "Pour les crémations Référence",
"id": 12,
"path": "",
"items": [
{
"name": "Petit modèle",
"description": "Par 25",
"price": 0,
"functional_id": "petit_modele_par_25",
"quantity": 2,
"amount": 0
},
{
"name": "Grand modèle",
"description": "Par 10",
"price": 0,
"functional_id": "grand_modele_par_10",
"quantity": 2,
"amount": 0,
"itemAdded": false
}
]
}
]
},
{
"name": "Documents",
"products": [
{
"file": "data:image/;base64,",
"name": "Affiches procédure",
"description": "De prise en charge",
"id": 18,
"path": "",
"items": [
{
"price": 0,
"functional_id": "affiches_procedure",
"quantity": 1,
"amount": 0
}
]
}
]
}
]
public deleteItem(item) {
this.fullCartInfo.forEach(category => {
category.products.forEach(product => {
product.items.forEach(itemAdded => {
if (item.functional_id === itemAdded.functional_id) {
this.fullCartInfo.splice(itemAdded);
}
});
});
});
this.cartService.removeItem(item);
}
我得到的是让他清空我的对象数组。我怎样才能让他只删除符合条件的人?
我犯了什么错?
感谢大家抽出时间需要删除的第一个元素的索引(开始
),以及可以选择删除的元素数量(删除计数
)
对于start
索引,我们可以使用回调的第二个参数,它是集合中当前元素的索引
以下示例使用:
- 简化的数据集
- 一个常规函数而不是类方法,只是因为它更容易使用。您可以将函数体复制并粘贴到
方法中deleteItem
const objectToRemove={“functional_id”:“grand_modele_par_10”}
常量对象={
fullCartInfo:[
{“产品”:[{“id”:12,“项目”:[{“功能id”:“大模型”}]},
{“产品”:[{“id”:18,“项目”:[{“功能id”:“附加程序”}]}
]
}
功能删除项(项){
this.fullCartInfo.forEach((category,index)=>{//当我们找到匹配的类别时,我们将用于.splice()的索引
category.products.forEach(产品=>{
product.items.forEach(itemsadded=>{
if(item.functional\u id==itemsadded.functional\u id){
this.fullCartInfo.splice(索引,1);//仅删除一项
}
});
});
});
}
deleteItem.apply(对象[objectToRemove]);
//.apply()仅用于设置deleteItem中的值,并因此模拟其作为类方法的行为。
console.log(对象)
:“开始
:开始更改数组的索引。删除计数
:一个整数,表示数组中要从开始删除的元素数。”非常感谢@Andreas,因为我只编写了很短时间的程序,有时会遇到非常明显的问题。我编辑了我的答案。看一下第一段下面的部分。您的.splice()
方法可能会产生不必要的副作用。