为了账号安全,请及时绑定邮箱和手机立即绑定

从对象数组中返回名称数组

从对象数组中返回名称数组

一只萌萌小番薯 2022-06-05 16:29:09
我知道如何遍历一个对象并打印出我想要的一组值,但是我无法按照我想要的顺序打印它。**问题是: **给定一组游戏结果记录,通过返回一组玩家姓名来确定所有玩家是谁。该数组应按遇到名称的方式排序。示例输入:[  { 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 }]预期结果:['Alishah','Bob','Maria','徐进','Elise']**我到目前为止的代码:**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 }];   console.log(main(data));
查看完整描述

3 回答

?
ibeautiful

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)]我们将在数组中获得不同的名称以实现所需的结果。


查看完整回答
反对 回复 2022-06-05
?
哈士奇WWW

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)


查看完整回答
反对 回复 2022-06-05
?
叮当猫咪

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"]


查看完整回答
反对 回复 2022-06-05
  • 3 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号