js数组之forEach,every,some,filter,map,reduce的区别

js数组有很多操作方法,其中forEach,every,some,filter,map,reduce是常容易混淆用法的,下面我来解释其中的区别

var list = [{
    "id": 1,
    "age": 19
},
{
    "id": 2,
    "age": 18
}]

var result = list.forEach((val,index) => {
    val.id = val.id + 1
    //return  
})
console.error(result, list)

var boolData = list.every(val => {
    return val.age > 18
})

console.error(boolData, list);

var boolData2 = list.some(val => {
    return val.age > 18
})

console.error(boolData2, list);

var data = list.filter(val => {
    return val.age > 18
})

console.error(data, list);

var mapData = list.map(val => {
    return (val.id) * 2
})

console.error(mapData, list);

var reduceData = list.reduce((prev, next) => {
       return prev.id + next.id * next.id 
})

console.error(reduceData);

输出结果如下:

undefined, [ { id: 2, age: 19 }, { id: 3, age: 18 } ]                      #forEach

false, [ { id: 2, age: 19 }, { id: 3, age: 18 } ]                          #every

true, [ { id: 2, age: 19 }, { id: 3, age: 18 } ]                           #some

[ { id: 2, age: 19 } ], [ { id: 2, age: 19 }, { id: 3, age: 18 } ]         #filter

[ 4, 6 ], [ { id: 2, age: 19 }, { id: 3, age: 18 } ]                       #map

11                                                                                         #reduce

可以看出:

  • forEach 是没有返回值的,你可以直接修改回调的val值来改变原数组,也可以利用val来生成新数组 (没有返回值)
  • every 是用来做判断,判断数组中的所有元素是否都符合某一个条件吗,符合则返回值是true,具体条件是有回调里面的return的值来决定(返回布尔值)
  • some 是用来做判断,判断数组中的是否存在某一个元素符合某一个条件吗,符合则返回值是true,具体条件是有回调里面的return的值来决定(返回布尔值)
  • filter 是用来过滤,可以过滤出来数组中的某些符合条件的元素集合,具体条件是有回调里面的return的值来决定 (返回新数组)
  • map 是用来根据原数组生成新数组的,元素是回调里面返回的值 (返回新数组)

你可能感兴趣的:(js数组之forEach,every,some,filter,map,reduce的区别)