blog icon indicating copy to clipboard operation
blog copied to clipboard

JavaScript中数组迭代方法

Open luckyyyyy opened this issue 8 years ago • 0 comments

使用数组总是会碰到数组的遍历(迭代)操作。说到迭代,可能会立马想起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}

luckyyyyy avatar Aug 16 '17 13:08 luckyyyyy