ES6 Обработка объектов (сокращение функций) - PullRequest
0 голосов
/ 12 октября 2018

Привет из Румынии,

Приведен список игр, представляющих собой объекты, которые выглядят так:

  {
    "id": 112814,
    "matches": "123",
    "tries": "11"
  }

возвращает объект, подобный такому

  {
    "totalMatches": m,
    "totalTries": y
  }

Гдеm - сумма всех совпадений для всех игр, а t - сумма всех попыток для всех игр.

 input = [
    {"id": 1,"matches": "123","tries": "11"},
    {"id": 2,"matches": "1","tries": "1"},
    {"id": 3,"matches": "2","tries": "5"}
  ]

  output = {
    matches: 126,
    tries: 17
  }

То, что у меня сейчас есть:

function countStats(list) {


  return {
    matches: 0,
    tries: 0
  };
}

Что мне нужноdo:

  1. Итерация по всем объектам
  2. Использование глобальной переменной для подсчета совпадений (m) и попыток (y)
  3. Возвращение m, y соответственно

Вместо этого мне сказали, что я не знаю, как: 1. Использовать функцию уменьшения 2. Вместо этого вернуть объект

Большое спасибо за любые советы

Ответы [ 5 ]

0 голосов
/ 12 октября 2018

input = [
  {"id": 1,"matches": "123","tries": "11"},
  {"id": 2,"matches": "1","tries": "1"},
  {"id": 3,"matches": "2","tries": "5"}
]

let totalMatches = 0;
let totalTries = 0;
let output = input.reduce(({totalMatches, totalTries}, {matches, tries}) => {
  totalMatches += +matches;
  totalTries += +tries;
  return {totalMatches, totalTries}
},{totalMatches: 0, totalTries: 0});

console.log(output)
0 голосов
/ 12 октября 2018

вот простой способ сделать это:

const games = [
  { id: 1, matches: '123', tries: '11' },
  { id: 2, matches: '1', tries: '1' },
  { id: 3, matches: '2', tries: '5' },
];

const reduced = games.reduce(
  (accumulator, game) => ({
    totalMatches: accumulator.totalMatches + Number(game.matches),
    totalTries: accumulator.totalTries + Number(game.tries),
  }),
  { totalMatches: 0, totalTries: 0 }
);

console.log(reduced);
0 голосов
/ 12 октября 2018

Вы должны использовать уменьшить в таких полях:

function countStats (list) {
  return {
    matches: input.reduce((a, b) => +a + +b.matches, 0),
    tries: input.reduce((a, b) => +a + +b.tries, 0)
  }
}

См. Синтаксический сахар для суммирования строк в виде чисел, т.е. +a + +b

0 голосов
/ 12 октября 2018

Вы можете взять объект для результата с нулевыми значениями и ключи для последующей итерации массива и ключи для добавления одинаковых значений ключа.

var input = [{ id: 1, matches: "123", tries: "11" }, { id: 2, matches: "1", tries: "1" }, { id: 3, matches: "2", tries: "5" }],
    output = { matches: 0, tries: 0 },
    keys = Object.keys(output);

input.forEach(o => keys.forEach(k => output[k] += +o[k]));

console.log(output);
0 голосов
/ 12 октября 2018

Вы можете использовать Array.reduce:

const input = [
  {"id": 1, "matches": "123", "tries": "11"},
  {"id": 2, "matches": "1", "tries": "1"},
  {"id": 3, "matches": "2", "tries": "5"}
];
  
const result = input.reduce((result, entry) => {
  result.matches += +entry.matches;
  result.tries += +entry.tries;
  return result;
}, {matches: 0, tries: 0});

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...