3 回答
TA贡献1993条经验 获得超6个赞
您可以为此使用.flatMap()和:Set()
let data = [
{ winner: 'Alishah', loser: 'Bob', loser_points: 3 },
{ winner: 'Maria', loser: 'Xu Jin', loser_points: 1 },
{ winner: 'Elise', loser: 'Bob', loser_points: 2 },
{ winner: 'Elise', loser: 'Maria', loser_points: 4 },
{ winner: 'Alishah', loser: 'Maria', loser_points: 2 },
{ winner: 'Maria', loser: 'Xu Jin', loser_points: 3 },
{ winner: 'Xu Jin', loser: 'Elise', loser_points: 2 }
];
const res = [...new Set(data.flatMap(x=>[x.winner, x.loser]))]
console.log( res )
解释:
使用
.flatMap()方法我们将首先得到一个数组数组。这里的内部数组将是winner&loser名称的数组。然后我们将展平数组以获得所有玩家姓名的单个数组。
最后使用
[...new Set(array)]我们将在数组中获得不同的名称以实现所需的结果。
TA贡献1799条经验 获得超6个赞
您可以使用Array.reduce()andSet来获取名称并删除重复项
Array.reduce()遍历数组。所以你可以将所有winner的 s 和losers 推送到初始的空数组中。
然后你可以创建一个新的Set. 这样,您可以删除重复项(因为所有项目都是string)。之后,您可以使用以下命令将其转换回数组spread syntax:[...new Set(array)]
const arr = [
{ winner: 'Alishah', loser: 'Bob', loser_points: 3 },
{ winner: 'Maria', loser: 'Xu Jin', loser_points: 1 },
{ winner: 'Elise', loser: 'Bob', loser_points: 2 },
{ winner: 'Elise', loser: 'Maria', loser_points: 4 },
{ winner: 'Alishah', loser: 'Maria', loser_points: 2 },
{ winner: 'Maria', loser: 'Xu Jin', loser_points: 3 },
{ winner: 'Xu Jin', loser: 'Elise', loser_points: 2 }
]
const names = [...new Set(arr.reduce((acc, cur) => [...acc, cur.winner, cur.loser], []))]
console.log(names)
TA贡献1776条经验 获得超12个赞
var players = collection.reduce((acc, player) => {
if(!acc.inStore[player.winner]) {
acc.players.push(player.winner)
acc.inStore[player.winner] = true
}
if(!acc.inStore[player.loser]) {
acc.players.push(player.loser)
acc.inStore[player.loser] = true
}
return acc;
}, {players: [], inStore: {}}).players
// ["Alishah", "Bob", "Maria", "Xu Jin", "Elise"]
添加回答
举报
