3 回答

TA貢獻(xiàn)1993條經(jīng)驗 獲得超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()
方法我們將首先得到一個數(shù)組數(shù)組。這里的內(nèi)部數(shù)組將是winner
&loser
名稱的數(shù)組。然后我們將展平數(shù)組以獲得所有玩家姓名的單個數(shù)組。
最后使用
[...new Set(array)]
我們將在數(shù)組中獲得不同的名稱以實現(xiàn)所需的結(jié)果。

TA貢獻(xiàn)1799條經(jīng)驗 獲得超6個贊
您可以使用Array.reduce()andSet來獲取名稱并刪除重復(fù)項
Array.reduce()遍歷數(shù)組。所以你可以將所有winner的 s 和losers 推送到初始的空數(shù)組中。
然后你可以創(chuàng)建一個新的Set. 這樣,您可以刪除重復(fù)項(因為所有項目都是string)。之后,您可以使用以下命令將其轉(zhuǎn)換回數(shù)組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貢獻(xiàn)1776條經(jīng)驗 獲得超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"]
添加回答
舉報