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

  • Автор темы Odrowonz
  • 59
  • Обновлено
  • 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

Тем
1

Постов
3

Баллов
13
  • 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

Тем
0

Постов
2

Баллов
2
  • 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]++; } }
Код (разметка): Следует признать, что приведенное выше отфильтровывает команды, которые никогда не побеждали.
 

Zlodey2


Рег
20 Nov, 2013

Тем
1

Постов
3

Баллов
13
Тем
49554
Комментарии
57426
Опыт
552966

Интересно