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()
方法可能会产生不必要的副作用。