ES5-数组方法
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
的结果不会返回数组,会返回一个true
orfalse
,所以常丢到一个条件判断里
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