根据嵌套的 id 过滤两个数组数据

安妮

我有两个数组如下:

const categories = [
  {"itemId": [1], "menuItemCateName": "Popular"}, 
  {"itemId": [1, 2], "menuItemCateName": "Featured"}
]

const items = [
  {
    "Id": 1,
    "price": 10,
    "itemName": "Spicy burger"
  },
  {
    "Id": 2,
    "price": 10,
    "itemName": "Pizza"
  }
]

我想根据数组内的 itemId 过滤数据,categories因此结果看起来像

[
  { name: 'Popular', items: [ { "Id": 1, "price": 10, "itemName": "Spicy burger"} ] },
  { name: 'Featured', items: [ { "Id": 1, "price": 10, "itemName": "Spicy burger"},{ "Id": 2, "price": 10, "itemName": "Pizza"} ] }
]

我试过的是:

let data = []
categories.map(category => {

          items.filter(item => item.Id === category.itemId[0]).map(b => {
                  data.push({ 'name': category.menuItemCateName, 'items': [b] })
                })
           })

但我得到了这个结果:

 [
      { name: 'Popular', items: [ { "Id": 1, "price": 10, "itemName": "Spicy burger"} ] },
      { name: 'Featured', items: [ { "Id": 1, "price": 10, "itemName": "Spicy burger"} ] }
    ]

在 Featured 类别中应该有两个项目数据,但我得到了一个项目数据,因为我category.itemId[0]在过滤器函数中,我必须在itemId我不知道如何完成它的属性值中循环我将不胜感激任何帮助。

维拉

使用map()创建新的对象,并使用filter()只添加匹配itemIds

const categories = [
  {"itemId": [1], "menuItemCateName": "Popular"}, 
  {"itemId": [1, 2], "menuItemCateName": "Featured"}
]

const items = [
  {
    "Id": 1,
    "price": 10,
    "itemName": "Spicy burger"
  },
  {
    "Id": 2,
    "price": 10,
    "itemName": "Pizza"
  }
]


let result = categories.map(cat => {
  let newObject = { // creating new object with desired properties
    name: cat.menuItemCateName,
    items: items.filter(item => cat.itemId.some(s => s === item.Id)) // filtering matching its object
  }
  return newObject; 
})
console.log(result)
console.log('********* second object items have to values: ',result[1].items.length )
console.log(result[1].items)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章