Сцепление методов массива JavaScript - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь изучить цепочку методов массива и использую базовый пример - https://jsbin.com/surizinifi/edit?js,console

const data = [
  {
    name: 'Butters',
    age: 3,
    type: 'dog'
  },
  {
    name: 'Lizzy',
    age: 6,
    type: 'dog'
  },
  {
    name: 'Red',
    age: 1,
    type: 'cat'
  },
  {
    name: 'Joey',
    age: 3,
    type: 'dog'
  },
];


const ages = data
  .filter(animal => animal.type === 'dog')
  .map(animal => animal.age * 7)
  .reduce((sum, animal) => sum + animal.age)

console.log('ages', ages);

Я получаю "NaN", возвращаемый в виде представления для числового вывода (например, 84),Есть идеи, что я здесь не так делаю?

Ответы [ 3 ]

1 голос
/ 30 сентября 2019

При отображении вы получаете массив чисел, а затем вам не нужно свойство для суммирования.

Хорошей идеей является использование начального значения для аккумулятора и предотвращение использования обоих первых значений массивав первом цикле.

const data = [
  {
    name: 'Butters',
    age: 3,
    type: 'dog'
  },
  {
    name: 'Lizzy',
    age: 6,
    type: 'dog'
  },
  {
    name: 'Red',
    age: 1,
    type: 'cat'
  },
  {
    name: 'Joey',
    age: 3,
    type: 'dog'
  },
];


const ages = data
  .filter(animal => animal.type === 'dog')
  .map(animal => animal.age * 7)
  .reduce((sum, age) => sum + age, 0)

console.log('ages', ages);
1 голос
/ 30 сентября 2019

Метод .map() возвращает массив чисел, для суммирования нет свойства

.reduce((sum, age) => sum + age)

const data = [
  {
    name: 'Butters',
    age: 3,
    type: 'dog'
  },
  {
    name: 'Lizzy',
    age: 6,
    type: 'dog'
  },
  {
    name: 'Red',
    age: 1,
    type: 'cat'
  },
  {
    name: 'Joey',
    age: 3,
    type: 'dog'
  },
];


const ages = data
  .filter(animal => animal.type === 'dog')
  .map(animal => animal.age * 7)
  .reduce((sum, age) => sum + age, 0)

console.log('ages', ages);
0 голосов
/ 30 сентября 2019

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

const data = [
  {
    name: 'Butters',
    age: 3,
    type: 'dog'
  },
  {
    name: 'Lizzy',
    age: 6,
    type: 'dog'
  },
  {
    name: 'Red',
    age: 1,
    type: 'cat'
  },
  {
    name: 'Joey',
    age: 3,
    type: 'dog'
  },
];


const ages = data
  .filter(animal => animal.type === 'dog')
  .map(animal => ({
    ...animal,
    age: animal.age * 7
   }))
  .reduce((sum, animal) => sum + animal.age, 0)

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