数组篇
map()方法
map函数可以将函数作为参数传入,并将数组中每个元素代入函数进行处理返回,返回一个新的数组
arr.map(function (elem, index, arr) {...}, arg)
可以看出map可以传入两个参数,第一个参数中函数可以填入三个参数,elem:数组的元素,index:数组的索引,arr:数组本身
第二个参数用来绑定回调函数内部的this
var arr = [1, 2, 3, 4, 5, 6, 7];
var obj = {a : 3};
var new_arr = arr.map(function (elem) {
if (this.a < elem) {
return elem * 2;
}
else{
return this.a;
}
},obj);
console.log(new_arr); // [3, 3, 3, 8, 10, 12, 14]
注意点:当元素为空位,undefined,null时map的表现
var count = 0;
var f = function (elem, index) {
count ++;
};
[1, , 3].map(f); //count 2
[1, null,3 ].map(f); //count 3
[1, undefined, 3].map(f); //count 3
当元素是空位时map会跳过,undefined,null不会跳过
forEach()方法
forEach函数与map类似,也是遍历数组,代入函数,没有返回值;可以理解成只是将数组元素进行一些操作处理
个人觉得forEach能实现的,map也能实现
var arr = [];
[1, 2, 3].forEach(function (elem) {
arr.push(elem * 2);
})
同理当元素是空位时forEach会跳过,undefined,null不会跳过
filter()方法
filter函数是过滤一些元素,当返回值为true时,保留元素,false时,舍去元素
var arr = [1, 2, 3].filter(function (elem) {
if(elem > 2) {
return 1;
}
return 0;
});
arr; //[3]
同理当元素是空位时forEach会跳过,undefined,null不会跳过
some(),every()方法
两个方法函数的都是布尔值
some函数,将数组遍历代入函数中,依次执行当一个满足条件就返回布尔值true,否则遍历完都不满足返回false
every函数,将数组遍历代入函数中,依次执行当一个不满足条件就返回布尔值false,否则遍历完都满足返回true
var count = 0
var bool = ["1", 2, 4].every(function (elem) {
count ++;
return (typeof elem === "number");
});
console.log(count, bool); //1 false
var count = 0
var bool = [1, "2", "4"].some(function (elem) {
count ++;
return (typeof elem === "number");
});
console.log(count, bool); //1 true
对于空位,null,undefined的执行
every()与some()一样:空位时会跳过,undefined,null不会跳过
当为空数组时([],[,]):
some()返回false,个人方便理解,遍历时一直在跳过,都不满足最后只好返回false
every()返回true,个人方便理解,遍历时一直在跳过,都满足最后只好返回true;
reduce()与reduceRight()
reduce函数的实现效果有点像斐波那契数列的味道
arr.reduce(function (prev, cur, index, arr) {}, arg)
reduce函数可以接受两个参数
第一个参数是函数,prev:累计变量,也就是上一次的执行结果;cur:当前变量;index:当前变量的索引;arr:操作的数组本身
第二个参数用来指定初始值,可以用于处理空数组
var f = function (prev, cur) {
return prev + cur;
};
[].reduce(f, 1); //1
[1, 2].reduce(f, 1); //4
[].reduce(f); //报错Reduce of empty array with no initial value
有一个有趣的应用:查找数组中length最长的,利用参数prev的累计功能
var f = function (prev, cur) {
return prev.length < cur.length ? cur : prev;
};
var lon = ['123', '11113','23','4322'].reduce(f);
console.log(lon);
reduceRight函数与reduce函数一样,只不过从后往前遍历数组
同理当元素是空位时reduce和reduceRight会跳过,undefined,null不会跳过
indexOf()与lastIndexOf()
indexOf函数返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1;
匹配规则用的是全等(===)
不填参数,返回-1
特别是匹配对象和NaN时,对象在全等下比较的是地址,而NaN不等于自身
var arr = [NaN, 1, {a : 1}];
console.log(arr.indexOf()); //-1
console.log(arr.indexOf(NaN)); //-1
console.log(arr.indexOf(1)); //1
console.log(arr.indexOf({a : 1})); //-1
lastIndexOf()是从后往前找
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。