Объедините объекты с одинаковыми значениями/идентификаторами и добавьте сумму к новому объекту

  • Автор темы Odrowonz
  • Обновлено
  • 13, May 2024
  • #1
У меня есть массив объектов, который выглядит следующим образом:

 teams.map(team =>{if(teams.includes(team.name)){return{
name: team.name,
won: team.won ===true?1:0}}})


Код (разметка): Я хочу, чтобы конечный массив выглядел следующим образом.

В новый массив следует добавить только одну команду и подсчитать, сколько игр она выиграла.

Порядок не имеет большого значения.

 const transformedTeams =[{ name:'Liverpool', won:2},{ name:'Newcastle', won:1},{ name:'Chelsea', won:0}];


Код (разметка): Написанный мной код выглядит следующим образом, но, к сожалению, не возвращает правильное значение:

 const teams =[{ name:'Liverpool', won:true, opponent:'Man Utd'},{ name:'Liverpool', won:true, opponent:'Liverpool'},{ name:'Chelsea', won:false, opponent:'Arsenal'},{ name:'Newcastle', won:true, opponent:'Liverpool'}];


Код (разметка):

Odrowonz


Рег
25 Mar, 2015

Тем
54

Постов
181

Баллов
451
  • 04, Jun 2024
  • #2
Не так аккуратно, как при использовании карты, но работает.
 const teams = [
 { name: "Liverpool", won: true, opponent: "Man Utd" },
 { name: "Liverpool", won: true, opponent: "Liverpool" },
 { name: "Chelsea", won: false, opponent: "Arsenal" },
 { name: "Newcastle", won: true, opponent: "Liverpool" }
];

var transformedTeams = [];

teams.forEach(function (team) {
 let found = false;

 transformedTeams.forEach(function (tt) {
 if (tt.name === team.name) {
 found = true;
 if (team.won === true) {
 tt.won++;
 }
 }
 });
 if (found === false) {
 transformedTeams.push({ name: team.name, won: team.won ? 1 : 0 });
 }
});
Код (JavaScript):
 

Exp3RT


Рег
09 Feb, 2012

Тем
75

Постов
190

Баллов
585
  • 14, Jun 2024
  • #3
Поскольку у вас есть только два свойства, не будет ли лучше объект (или, может быть, карта?), где название команды является индексом, а количество побед — значением?

 
gameloop: for (var game of teams) {
if (team.won) {
for (var info of transformedTeams) {
if (info.name === team.name) {
if (team.woninfo.won++;
continue gameLoop;
}
}
trasnformedTeams.push({ name : game.name, won :1 });
}
}


Код (разметка): ... и @sarahk, foreach — это чушь, потому что это «обратный вызов ни за что». Я НАСТОЯТЕЛЬНО советую никогда не использовать его из-за чрезмерных расточительных накладных расходов.

for/of — твой друг.

как и ярлыки.
 const teams = [ { name: "Liverpool", won: true, opponent: "Man Utd" }, { name: "Liverpool", won: true, opponent: "Liverpool" }, { name: "Chelsea", won: false, opponent: "Arsenal" }, { name: "Newcastle", won: true, opponent: "Liverpool" } ]; var teamWins = {}; for (var game of teams) { if (game.won) { if (!teamWins[game.name]) teamWins[game.name] = 1; else teamWins[game.name]++; } }
Код (разметка): Следует признать, что приведенное выше отфильтровывает команды, которые никогда не побеждали.
 

Caraarrendgug71


Рег
20 Nov, 2013

Тем
88

Постов
213

Баллов
693
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно