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 是用来根据原数组生成新数组的,元素是回调里面返回的值 (返回新数组)