【发布时间】:2019-11-15 08:13:36
【问题描述】:
目前有一个包含游戏版本的对象数组。然而,游戏发布可能发生在多个平台上,并且这些在数组中显示为单独的对象。我希望通过比较游戏 ID 来删除重复的游戏,但合并平台对象
我已尝试使用 reduce 函数,该函数成功地通过游戏 ID 删除重复对象,但我无法将其调整为合并平台
const filteredArr = data.reduce((acc, current) => {
const x = acc.find(item => item.game.id === current.game.id);
if (!x) {
return acc.concat([current]);
} else {
return acc;
}
}, []);
当前数组:
const data = [{
"id": 157283,
"date": 1553212800,
"game": {
"id": 76882,
"name": "Sekiro: Shadows Die Twice",
"popularity": 41.39190295640344
},
"human": "2019-Mar-22",
"m": 3,
"platform": {"id": 48, "name": "PlayStation 4"},
"region": 8,
"y": 2019
}, {
"id": 12,
"date": 1553212800,
"game": {
"id": 76832,
"name": "Spiderman",
"popularity": 41.39190295640344
},
"human": "2019-Mar-22",
"m": 3,
"platform": {"id": 6, "name": "PC (Microsoft Windows)"},
"region": 8,
"y": 2019
}, {
"id": 157283,
"date": 1553212800,
"game": {
"id": 76882,
"name": "Sekiro: Shadows Die Twice",
"popularity": 41.39190295640344
},
"human": "2019-Mar-22",
"m": 3,
"platform": {"id": 48, "name": "Xbox"},
"region": 8,
"y": 2019
}]
合并后的预期格式:
[{
"id": 157283,
"date": 1553212800,
"game": {
"id": 76882,
"name": "Sekiro: Shadows Die Twice",
"popularity": 41.39190295640344
},
"human": "2019-Mar-22",
"m": 3,
"platforms": ["PlayStation", "Xbox"],
"region": 8,
"y": 2019
}, {
"id": 12,
"date": 1553212800,
"game": {
"id": 76832,
"name": "Spiderman",
"popularity": 41.39190295640344
},
"human": "2019-Mar-22",
"m": 3,
"platforms": ["Playstation"],
"region": 8,
"y": 2019
}]
【问题讨论】:
-
不同平台发布日期不同怎么办?在这种情况下,《只狼:Shadows Die Twice》同时在多个平台上发布了他们的游戏。但稍后为某些平台发布游戏的情况并不少见。以《暗黑破坏神3》为例,2012 年在 Windows 和 OS X 上发布,2013 年在 PS3 上发布,2014 年在 PS4 上发布,2018 年在 Switch 上发布。
-
好点,我认为一个简单的操作员会解决这个用例。
const x = acc.find(item => item.game.id === current.game.id && item.releaseDate == current.releaseDate);
标签: javascript arrays object ecmascript-6