首页 > 解决方案 > 地图和过滤器的组合不能按预期工作

问题描述

我有一个这样的对象。feature_id如果值存在于我已经拥有的数组中,我需要删除特征数组中的元素。

[
  {
    "name": "Display",
    "data": {
      "id": 34566,
      "category_id": 2647,
      "feature_group_id": 5
    },
    "features": [
      {
        "name": "Tipo di display",
        "data": {
          "id": 85325,
          "category_id": 2647,
          "feature_id": 9104,
          "category_feature_group_id": 34566,
          "order": 10100140
        }
      },
      {
        "name": "Risoluzione del display",
        "data": {
          "id": 85332,
          "category_id": 2647,
          "feature_id": 1585,
          "category_feature_group_id": 34566,
          "order": 10100130
        }
      },
      {
        "name": "Touch screen",
        "data": {
          "id": 85331,
          "category_id": 2647,
          "feature_id": 4963,
          "category_feature_group_id": 34566,
          "order": 10100129
        }
      },
      {
        "name": "Tipo di vetro",
        "data": {
          "id": 94704,
          "category_id": 2647,
          "feature_id": 7610,
          "category_feature_group_id": 34566,
          "order": 100050
        }
      }
    ]
  },
  {
    "name": "Design",
    "data": {
      "id": 16293,
      "category_id": 2647,
      "feature_group_id": 148
    },
    "features": [
      {
        "name": "Colore struttura",
        "data": {
          "id": 85298,
          "category_id": 2647,
          "feature_id": 10059,
          "category_feature_group_id": 16293,
          "order": 10100090
        }
      },
      {
        "name": "Materiale della scocca",
        "data": {
          "id": 85300,
          "category_id": 2647,
          "feature_id": 5214,
          "category_feature_group_id": 16293,
          "order": 10100089
        }
      },
      {
        "name": "Colore cinturino",
        "data": {
          "id": 85301,
          "category_id": 2647,
          "feature_id": 11025,
          "category_feature_group_id": 16293,
          "order": 10100080
        }
      },
      {
        "name": "Materiale cinturino",
        "data": {
          "id": 94551,
          "category_id": 2647,
          "feature_id": 7605,
          "category_feature_group_id": 16293,
          "order": 100160
        }
      }
    ]
  }
]

我写这个,featureIds我的数组在哪里,结构是对象

      structure.map((object) => {
        object.features.filter(feature => {
          this.featureIds.includes(feature.data.id)
        })
      })

结果,我仍然有很多 ID 不在我的数组中的功能。错误在哪里?

标签: javascripttypescript

解决方案


有几个问题。主要的是filter 返回应用了过滤器的新数组,它不会更改您调用它的数组。您没有将那个新数组用于任何事情。另一个是map做同样的事情,它返回一个带有映射值的数组,它不会修改你调用它的数组。

如果要过滤features数组中所有对象的数组,您有几个选项,但都涉及使用过滤/映射数组的事物的返回值:

  1. 更新到位的对象

    for (const object of structure) {
        object.features = object.features.filter(feature => this.featureIds.includes(feature.data.id));
    }
    
  2. 创建新对象和新数组:

    structure = structure.map(object => ({
        ...object,
        features: object.features.filter(feature => this.featureIds.includes(feature.data.id))
    }));
    

推荐阅读