我有2个对象数组:itemsList和itemsFetched。每个数组内的所有对象都具有相同的结构(键/值的数量)。其中一个按键具有相同的 '意义',但不同的名称(ITEM_ID上itemsList,ID上itemsFetched)。他们的价值观是一样的。过滤器和克隆对象属性
我需要过滤itemsList阵列,只留下那有ITEM_ID值等于ID值上itemsFetched的对象。然后从itemsDetched数组(其与item_id = id匹配)复制(添加)键/值count到过滤数组。
我有一个工作代码,但我确定它不是解决此问题的最佳方法。我已经问过类似的问题了(关于'filter'部分)解决了我的问题,但由于我必须在过滤之后添加'count'部分,所以我最终重构了整个问题。
itemsList(样品)
[
{
"id": 0,
"name": "Egg",
"img": "http://www.serebii.net/pokemongo/items/egg.png"
},
{
"id": 1,
"name": "Pokeball",
"img": "http://www.serebii.net/pokemongo/items/20pokeballs.png"
},
{
"id": 2,
"name": "Greatball",
"img": "http://www.serebii.net/pokemongo/items/greatball.png"
},
{
"id": 401,
"name": "Incense",
"img": "http://www.serebii.net/pokemongo/items/incense.png"
},
{
"id": 901,
"name": "Incubator (Unlimited)",
"img": "http://www.serebii.net/pokemongo/items/eggincubator.png"
}
]
itemsFetched(样品)
[
{
"item_id": 1,
"count": 50,
"unseen": true
},
{
"item_id": 401,
"count": 2,
"unseen": true
},
{
"item_id": 901,
"count": 1,
"unseen": true
}
]
resultArray(我想要的到底)
[
{
"id": 1,
"name": "Pokeball",
"count": 50,
"img": "http://www.serebii.net/pokemongo/items/20pokeballs.png",
},
{
"id": 401,
"name": "Incense",
"count": 2,
"img": "http://www.serebii.net/pokemongo/items/incense.png"
},
{
"id": 901,
"name": "Incubator (Unlimited)",
"count": 1,
"img": "http://www.serebii.net/pokemongo/items/eggincubator.png"
}
]
我现在的代码(工作)
let arr = [];
itemsFetched.forEach((item) => {
itemsList.forEach((item2) => {
if (item.item_id === item2.id) {
arr.push({
"id": item.item_id,
"name": item2.name,
"count": item.count,
"img": item2.img
});
}
});
});
PS:我可以使用ES6/7语法/功能。
最好在服务器上做这个处理。总是返回格式化到浏览器的数据。然后,您不必在每个需要此数据的页面上执行相同的数据操作。 – Luke101
是的,我意识到这一点。这是服务器端完成的。其中一个数组位于json文件及其模板上,另一个是对外部api调用的响应。 – nip
他试图从数组中获取id。这里--- >> if(itemsFetched.item_id === itemsList.id) –