blog
blog copied to clipboard
JavaScript中数组迭代方法
使用数组总是会碰到数组的遍历(迭代)操作。说到迭代,可能会立马想起for语句对数组进行迭代。 比如需要迭代出下面数组peoples年龄(age)大于30的人名(name)。
var peoples = [
{
name: '张三',
gender:'F',
age: 29,
},
{
name: '李四',
gender:'F',
age: 31,
},
{
name: '王五',
gender:'F',
age: 21,
},
{
name: 'tony',
gender:'F',
age: 33,
},
{
name: 'cassie',
gender:'M',
age: 29,
},
]
for (var i = 0; i < peoples.length; i++ ) {
if (peoples[i].age > 30) {
console.log(peoples[i].name + ':' + peoples[i].age);
}
}
// 李四:31
// tony:33
但其实我们大可不必使用for循环,ES5为我们定义了几个数组迭代方法,它们都会将数组中的所有元素执行回调函数。
forEach:没有返回值,仅对数组进行操作。every: 返回一个布尔值(true或false),判断每个数组项是否符合指定函数的条件,符合为true,反之为false。some: 返回一个布尔值(true或false),判断每个数组项是否符合指定函数的条件,只要任何一项符合条件,就会返回true。filter: 将条件为true的值返回,生成一个新的数组。map: 返回所有的值,生成一个新的数组。reduce:将该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。reduceRight:和reduce一样,只是它是从末尾开始。
var peoples = [
{
name: '张三',
gender:'F',
age: 29,
},
{
name: '李四',
gender:'F',
age: 31,
},
{
name: '王五',
gender:'F',
age: 21,
},
{
name: 'tony',
gender:'F',
age: 33,
},
{
name: 'cassie',
gender:'M',
age: 29,
},
]
peoples.forEach(item, index, array) => {
if (item.age > 30) {
console.log(item.name);
}
})
const result = peoples.every((item, index, array) => item.age > 30); // false
const result = peoples.some(item, index, array) => item.age > 30); // true
const result = peoples.filter(item, index, array) => item.age > 30); // 0: {name: "李四", gender: "F", age: 31} 1: {name: "tony", gender: "F", age: 33}
const result = peoples.map(item, index, array) => item.age > 30); // [false, true, false, true, false]
// reduce
const result = peoples.reduce((preValue, item, index, array) => item.age > 30 && ++preValue || preValue, 0); // 2
const result = peoples.reduce((preValue, item, index, array) => item.age > 30 && item || preValue); // {name: "tony", gender: "F", age: 33}
const result = peoples.reduceRight((preValue, item, index, array) => item.age > 30 && item || preValue); // {name: "李四", gender: "F", age: 31}