Метод Javascript Reduce Создание объекта-накопителя

1
var numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2];
var oddEvenCounts = numbers.reduce(function(counts, number) {
  if (isOdd(number)) {
    counts[odd]++;
  } else {
    counts[even]++;
  }
}, {});

Я ищу ошибку в этом бите кода (все еще изучаю метод reduce;)) - где я ошибаюсь?

  • 0
    какие значения хранятся в переменных even и odd ?
Теги:
reduce

2 ответа

5
Лучший ответ

Рабочий код с комментариями:

var numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2];

function isOdd(n) {
  return !!(n % 2);
}

var oddEvenCounts = numbers.reduce(function(counts, number) {
  if (isOdd(number)) {
    counts.odd++; // use dot notation or ['odd']
  } else {
    counts.even++;  // use dot notation or ['even']
  }
  
  return counts; // return the accumulator
}, { odd: 0, even: 0 }); // set the initial values of odd and even

console.log(oddEvenCounts);

Вы можете немного сократить код, используя обозначение скобок и тернарный оператор:

var numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2];

function isOdd(n) {
  return !!(n % 2);
}

var oddEvenCounts = numbers.reduce(function(counts, number) {  
  counts[isOdd(number) ? 'odd' : 'even']++;
  
  return counts;
}, { odd: 0, even: 0 });

console.log(oddEvenCounts);
  • 0
    Спасибо, очень полезно: я вижу, что я сделал - нет оператора return, и я не установил объект count для начала, и при этом я не вызвал его правильно
  • 0
    @marie_antoinette - добро пожаловать :)
0

Верните свой аккумулятор:

var numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2];
var oddEvenCounts = numbers.reduce(function(counts, number) {
  if (isOdd(number)) {
    counts[odd]++;
  } else {
    counts[even]++;
  }
  return counts;
}, {});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню