我有两个数组如下:
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] 删除。
我来说两句