Wpis z mikrobloga

mam pytanie odnosnie funkcji map,filter i reduce
czytam sobie jakis krotki artykul o ich laczeniu i mam pewien problem
https://codeburst.io/javascript-learn-to-chain-map-filter-and-reduce-acd2d0562cd4

Otoz jest sobie tablica obiektow:

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'
},
];

i gosc w tym artykule robi sobie cos takiego:

let ages = data
.filter((animal) => {
return animal.type === 'dog';
}).map((animal) => {
return animal.age * 7
}).reduce((sum, animal) => {
return sum + animal.age;
});

Potem troche przerabia kod i wyglada to tak

let isDog = (animal) => {
return animal.type === 'dog';
}

let dogYears = (animal) => {
return animal.age * 7;
}

let sum = (sum, animal) => {
return sum + animal;
}

let ages = data
.filter(isDog)
.map(dogYears)
.reduce(sum);

I drugie zgodnie z zlaozeniem pokazuje wynik 84, natomiast pierwsze NaN.
Ktos wyjasni dlaczego tak sie dzieje? Jedyne co mi przychodzi do glowy to to ze w drugim w funkcji reduce uzywa samego animal a w pierwszym animal.age
Ale czy funkcja map nie powinna zwrocic tablicy obiektow a nie jedynie tablice jednej wlasnoci(czyli age) poszczegolnych obiektow?

#javascript #programowanie #webdev
  • 2