不管你是一个高级或初级程序员,感觉都应该记录一下自己的学习点滴,也是一个学习过程,以前就是会用从来没总结过,现在有时间来写一下,写的不对的地方可以评论@我。
言归正题,看下面总结:
/*结论:
* map:返回一个新数组,原数组不变,遍历数组每一项值,有三个参数item, index, arr
* forEach:无返回值,若返回则值为undefined,原数组不变,遍历数组每一项值,有三个参数item, index, arr
* every:返回值是一个布尔值。只有所有元素都具备某项特性后,才会返回true。只要有一项不满足就返回false。
* some:返回值是一个布尔值true。只要有一个满足,循环就会结束,接下来的数据就不会继续判断
* filter:过滤数组筛选出符合条件的值,条件为true时的结果。
* **/
案例如下:
var log = console.log.bind(console);
/*所有匿名函数中this都指向window
//map遍历数组,原数组不变,会返回一个新数组
var arr = [2, 3, 4, 6, 8, 7];
var s = '';
var str = arr.map(function(item, index, arr) {
log(this); //Window
log(item); //遍历的每一项值
log(index); //遍历每一项的下标值
log(arr); //原数组arr
s = s + item;
log(s); //把数组中值拼接成字符串格式
return item % 2 ==0;
})
log(str); //[true, false, true, true, true, false]
var capitals = ["北京都", "南京都", "广州都", "重庆都", "西安都", "拉萨都"];
let targets = numbers.map(function(item, index, list) {
return capitals[item - 1];
});
log(targets); // ["北京都", "南京都", "广州都", "重庆都", "西安都", "拉萨都"]
*/
/*every,它地用武之地在哪里呢?不期望它能对原始数组进行修改。它地定位是考察数组地整体特性。也就是考察数组中所有元素的共性。比如所有元素是否都是奇数,或者所有元素是否都是偶数。它关注的是数组整体元素的共性。
* 只要有一个不满足,循环就会结束,接下来的数据就不会继续判断。
var numbers = [4, 2, 3, 4, 5, 6, 7, 8, 9];
let bool = numbers.every(function(item, index, list) {
log(this); ////Window
log(item); //4,2,3
log(index); //0,1,2
log(list); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
return item % 2 == 0;//false时,结束循环
});
log(bool); //false
*/
//注意:every方法有返回值,返回值是一个布尔值。只有所有元素都具备某项特性后,才会返回true。只要有一项不满足就返回false。
/*
//some:它关注的是数组的个性。只要有一个满足,循环就会结束,接下来的数据就不会继续判断。
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let bool = numbers.some(function(item, index, list) {
log(item); //返回数组中符合条件的项 1,2
log(index); //返回数组中符合条件项的下标0,1
log(list); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
return item % 2 ==0; //true满足条件循环结束
});
log(bool); //true
*/
/*
//filter:过滤掉不满足条件的选项值。一般数组个数可能会变,数组中值不会变。
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let bool = numbers.filter(function(item, index, list) {
log(item); //返回数组中每一项
log(index); //返回数组中每项的下标
log(list); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
return item % 2 == 0; //返回满足条件的数组值,存到一个新的数组中
});
log(bool); //[2, 4, 6, 8]
*/
//forEach:遍历每一项数组值,没有返回值
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let bool = numbers.forEach(function(item, index, list) {
log(item); //返回数组中每一项
log(index); //返回数组中每项的下标
log(list); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
return item % 2 == 0; //不会返回
});
log(bool); //undefined