首页 > 解决方案 > 删除数组内的内部数组的一项 - 反应原生

问题描述

我有一个包含数组的 json 数据。数组的每个元素都有数组命名项。如果字符串与 itemName 不匹配,我想删除内部数组元素。我尝试使用过滤器方法,但它没有按预期工作。它只返回匹配的内部数组元素,但所有外部数组元素也被删除。PS 查看代码、json 数据、我得到的输出和预期的输出。提前致谢

代码:

const update2 =
 state.menuResponse.map(
       item => {
        return item.items.filter(item => (item.itemName).includes("C"))
})

console.log("menuSearcheddd", update2)

json数据

{
  "data": [
    {
      "menuHeader": "Starters",
      "items": [
        {
          "itemId": "1",
          "itemName": "burger",
        },
        {
          "itemId": "ITD1ZYTH",
          "itemName": "Cheese balls",
        }
      ]
    },
    {
      "menuHeader": "string",
      "items": [
        {
          "itemId": "1",
          "itemName": "burger",
        },
        {
          "itemId": "2",
          "itemName": "burger-non veg",
        }
      ]
    }
  ]
}

输出:

{
  "data": [
    {
      "items": [
        {
          "itemId": "ITD1ZYTH",
          "itemName": "Cheese balls",
        }
      ]
    },
    {
      "items": []
    }
  ]
}

应该是什么?

{
  "data": [
    {
      "menuHeader": "Starters",
      "items": [
        {
          "itemId": "ITD1ZYTH",
          "itemName": "Cheese balls",
        }
      ]
    },
    {
      "menuHeader": "string",
      "items": []
    }
  ]
}

标签: javascriptreact-native

解决方案


外部元素被移除不是因为filter方法,而是因为map方法。看,在您的map方法中,您忽略了所有其他属性,因为您只返回您在items数组上处理的内容。

所以,代码应该看起来更像这样:

const update2 = state.menuResponse.map(item => ({ ...item, items: item.items.filter(subItem => subItem.itemName.includes('C')) }));

因此,从您的map方法中,您将在处理对象之前返回对象内部的所有内容,并且仅items通过过滤数组来修改属性,就像您已经完成的那样。

还没有设法测试它,但理论上应该可以工作......


推荐阅读