【发布时间】:2019-05-06 15:28:15
【问题描述】:
我有以下示例数据,它们是三个对象数组,即:
let dets = [
{
"id": 1,
"name":"tom",
"country":"USA",
"phone": "1234"
},
{
"id": 2,
"name":"sarah",
"country":"ITALY",
"phone": "8899"
},
{
"id": 3,
"name":"harry",
"country":"GERMANY",
"phone": "3434"
}
];
let foods = [
{
"id": 1,
"food":"pizza"
},
{
"id": 1,
"name":"pasta"
},
{
"id": 1,
"name":"oranges"
},
{
"id": 2,
"name":"donuts"
},
{
"id": 2,
"name":"pizza"
},
{
"id": 2,
"name":"apples"
},
{
"id": 3,
"name":"apples"
},
{
"id": 3,
"name":"strawberries"
}
];
let musics = [
{
"id": 1,
"music":"jazz"
},
{
"id": 1,
"music":"funk"
},
{
"id": 1,
"music":"country"
},
{
"id": 2,
"music":"jazz"
},
{
"id": 2,
"music":"rock"
},
{
"id": 2,
"music":"heavy metal"
},
{
"id": 3,
"music":"orchestral"
},
{
"id": 3,
"music":"jazz"
},
{
"id": 3,
"music":"percussion"
}
];
我想要实现的最终结果是基于上述数据的对象的以下结果数组,其中食物和音乐都是对象内的数组。
我知道我可以使用简单的数组迭代来实现以下结果,但我想看看是否可以使用 JavaScript filter 和 reduce 以更好的方式完成>.
dets 数组是父数组,使用“id”值检索foods 和musics 中的子数组值。
let result = [
{
"id": 1,
"name":"tom",
"country":"USA",
"phone": "1234",
"foods": ["pizza","pasta","oranges"],
"musics": ["jazz","funk","country"]
},
{
"id": 2,
"name":"sarah",
"country":"ITALY",
"phone": "8899",
"foods": ["donuts","pizza","apples"],
"musics": ["jazz","rock","heavy metal"]
},
{
"id": 3,
"name":"harry",
"country":"GERMANY",
"phone": "3434",
"foods": ["apples","strawberries"],
"musics": ["orchestral","jazz","percussion"]
}
];
【问题讨论】:
-
"更好的方法" ...好吧,那就不要使用 reduce :)
-
如果一个 id 没有出现在任何数组中怎么办?
-
“id”将始终存在于数组中,并始终在寻找新的方法。
标签: javascript arrays json ecmascript-6