删除数组内的内部数组项-反应本机

时间:2019-05-31 10:24:25

标签: javascript react-native

我有一个具有数组的json数据。数组的每个元素都有一个名为项的数组。如果字符串与itemName不匹配,我想删除内部数组元素。我尝试使用过滤器方法,但无法正常工作。它仅返回匹配的内部数组元素,但所有外部数组元素也将被删除。 P.S看到代码,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": []
    }
  ]
}

2 个答案:

答案 0 :(得分:1)

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

因此,代码应更像这样:

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

因此,您可以从map方法返回对象内部的所有内容,然后再对其进行处理,并且仅通过过滤数组就可以修改items属性,就像您已经做过的那样。

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

答案 1 :(得分:1)

var list = this.state.materialList.filter(item => {
            //Filter Inner Array 
            var innerData = item.data.filter(dataItem => {
                return dataItem.qty > 0
            })
            // Assign value
            item.data = innerData;
            return item.Id > 0
        })
 console.log('Filtered List ',list);