ES5-数组方法

Author Avatar
Aryb1n 5月 30, 2017

forEach

[].forEach(function(value, index, array) {
    // ...
});

map

[].map(function(value, index, array) {
    // ...
});

一个栗子

var squre = [1, 2, 3].map(function(value, index, array) {
    return value * value;
});
// 好像是[, index, array]不需要的话可以不写

map相当于是一个增强版的forEach
map 可以对数组中每个元素调用函数,并且把函数的返回值收集起来,返回一个结果数组,没有返回值的就是undefined,而forEach只是执行callback,没有后面的功能

filter

var newData = [0, 1, 2, 3].filter(function(item) {return item < 2})
// => newData [0, 1]

return true的加到结果当中,false的话就被filter掉了

棒的是可以链式调用

var res = [0,1,2,3,4,5]
    .map(function(item) {return item * item})
    .filter(function(item) {return item < 10})
// => [ 0, 1, 4, 9 ]

如果是字符串的可以return /reg/.test(item)来filter咯

some

some的结果不会返回数组,会返回一个trueorfalse,所以常丢到一个条件判断里

var res = [0,1,2,3,4,5].some(function(item) {console.log(item); return item > 2})
/*
 * 0
 * 1
 * 2
 * 3
*/
//=> res true

只要有函数返回true,那最后结果就是true
some而且只要跑到true的时候,就不会进行下去了,forEach这种的话都会跑完
所以这里结果只console.log出来 0 1 2 3, 没有4 5

every

就是都满足啦
所以跑到第一个不满足的地方,下一个值就不会跑了

var res = [0,1,2,3,4,5].every(function(item) {console.log(item); return item > 2})
// => 0
// res false

reduce

要去吃饭打球了,抄别人一个栗子吧

[1,2,3,4].reduce(function(pre,cur){return pre + cur})
//=> 10

就是一种累积效应

[].reduce(function(previous, current, index, array) {
    // ...
});

另外可以设置一个初始值

array.reduce(callback[, initialValue])

reduceRight

就是从右边开始reduce