按字符串数组过滤嵌套的对象数组

Filtering nested array of objects by array of strings

晚上好

不知道有没有人能帮帮我,我好像在兜圈子 我正在尝试通过另一个字符串数组从数组中获取包含 key/field "type" 的所有对象。

{
  "someData": [
    {
      "date": "someDate",
      "someNestedData": [
        {
          "id": "1",
          "type": "type1",
          "dateCreated": "someDate"
        },
        {
          "id": "2",
          "type": "type2",
          "dateCreated": "someDate"
        }
      ]
    },
      {
      "date": "someDate",
      "someNestedData": [
        {
          "id": "3",
          "type": "type1",
          "dateCreated": "someDate"
        },
        {
          "id": "4",
          "type": "type4",
          "dateCreated": "someDate"
        }
      ]
    }

  ]
}

和另一个字符串数组const types = ['type1', 'type2]` 我正在尝试过滤掉数组,以便过滤掉类型数组中不包含键的任何对象。

所以最终结果会是

{
  "someData": [
    {
      "date": "someDate",
      "someNestedData": [
        {
          "id": "1",
          "type": "type1",
          "dateCreated": "someDate"
        },
        {
          "id": "2",
          "type": "type2",
          "dateCreated": "someDate"
        }
      ]
    },
      {
      "date": "someDate",
      "someNestedData": [
        {
          "id": "3",
          "type": "type1",
          "dateCreated": "someDate"
        },
      ]
    }

  ]
}

我尝试了一些类似

的方法
data.someData.someNestedData.indexOf(function (i) {
  return types.indexOf(i.type);
})

以及其他一些臃肿的方法,只是不正确并正在寻找性能相当好的东西。 TIA :)

你可以这样做:

const types = ['type1', 'type2'];
const res = [
    {
      "date": "someDate",
      "someNestedData": [
        {
          "id": "1",
          "type": "type1",
          "dateCreated": "someDate"
        },
        {
          "id": "2",
          "type": "type2",
          "dateCreated": "someDate"
        }
      ]
    },
      {
      "date": "someDate",
      "someNestedData": [
        {
          "id": "3",
          "type": "type1",
          "dateCreated": "someDate"
        },
        {
          "id": "4",
          "type": "type4",
          "dateCreated": "someDate"
        }
      ]
    }
]
// map over the array
.map(obj => ({
     // rebuild the object 
     ...obj, 
     // but replace "someNestedData" with the list of element that has the 'type' filed included in types
     someNestedData: obj.someNestedData.filter(
          el => types.includes(el.type)
     )
}))
console.log(res)