[英]JavaScript array method chaining
我正在尝试学习数组方法链接并正在使用一个基本示例 - 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”作为数字 output(例如 84)返回。 有什么想法我在这里做错了吗?
.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);
通过映射,你得到一个数字数组,然后你不需要求和的属性。
一个好主意是使用累加器的起始值,并防止在第一个循环中使用数组的两个第一个值。
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);
您还可以将一组新的动物传递给 reduce-method,其中每只动物的年龄乘以 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.