拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 回圈遍历物件阵列..如何过滤掉重复的名称并在新阵列中回传玩家?

回圈遍历物件阵列..如何过滤掉重复的名称并在新阵列中回传玩家?

白鹭 - 2022-01-24 1950 0 0

我正在尝试迭代一个物件阵列,并在一个新阵列中,只回传玩家,他们的名字以相同的顺序排列,并且没有多次列出。我想我可以做类似的事情或使用 forEach回圈,但我不确定如何处理多次出现

const players = function(outcomes) {

  const arr = [];
  for (let i = 0; i < outcomes.length; i  ) {
    if (outcomes.includes(winner, loser))
    arr.push(arr[i]);
  }
  return arr;

};

示例输入和预期输出:

const playerNames = [
 { winner: 'Sam',   loser: 'Bruce',    loser_points: 10 },
  { winner: 'Sam',   loser: 'Hakim',  loser_points: 9 }]

Output I want: [Sam, Bruce, Hakim]

uj5u.com热心网友回复:

const playerNames = [
    { winner: 'Sam',   loser: 'Bruce',    loser_points: 10 },
    { winner: 'Sam',   loser: 'Hakim',  loser_points: 9 }
];

var getPlayers = function(games) { 
    var players = {}; 
    var game;
    for (var i=0; i<games.length; i  ) {
        game = games[i];
        players[game.winner] = 1;
        players[game.loser] = 1;
    }
    return Object.keys(players);
}

console.log(getPlayers(playerNames));

uj5u.com热心网友回复:

有多种方法可以实作这一点(请参阅发布的其他解决方案)。以下是您的代码的修改版本。在您的情况下添加了一些小的更正if

const playerNames = [{
    winner: 'Sam',
    loser: 'Bruce',
    loser_points: 10
  },
  {
    winner: 'Sam',
    loser: 'Hakim',
    loser_points: 9
  },
  {
    winner: 'Sam',
    loser: 'Paul',
    loser_points: 9
  }
];

const players = function(outcomes) {

  const arr = [];
  for (let i = 0; i < outcomes.length; i  ) {
    // check and push winner
    if (!arr.includes(outcomes[i].winner))
      arr.push(outcomes[i].winner);

    // check and push loser
    if (!arr.includes(outcomes[i].loser))
      arr.push(outcomes[i].loser);
  }
  return arr;

};


console.log(players(playerNames));

uj5u.com热心网友回复:

用于Set生成唯一的资料串列。

const playerNames = [{ winner: 'Sam', loser: 'Bruce', loser_points: 10 },{ winner: 'Sam', loser: 'Hakim', loser_points: 9 }];
const players = Array.from(new Set(playerNames.flatMap((node) => [node.winner, node.loser])));
console.log(players);

uj5u.com热心网友回复:

我根据 Elaine Alt 更新了我的答案,因为我真的很喜欢他/她的方法!

(但使用 reduce 代替)

const getNames = games => {
    return Object.keys(
        games.reduce((acc, game) => {
            return {
                ...acc,
                [game.winner]: 1,
                [game.loser]: 1,
            };
        }, {})
    );
};
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *