在原生JS中,除了for循环以外,自身还带有5中迭代的方法,可根据场景自行选择,十分方便
1.forEach
forEach十分好用,数组的forEach回调函数中写入执行代码段就可以,回调函数有三个参数,第一个为数组的每一个值,第二个参数为index下标,第三个参数为当前数组,但是注意的是forEach不能通过在For循环中使用return或者return false、break等方法终止遍历,jQuery中的$.each方法break使用return false,continue使用return true
var arr = [0,1,2];
arr.forEach(function (val,idx,arr) {
console.log(val); //1,2,3
});
使用forEach遍历数组想要终止循环可以通过try catch抛出异常的形式来终止循环
try{
arr.forEach(function (val,idx) {
if (val < 2) {
console.log(val);
} else {
foreach.break = new Error("Stop");
}
});
}catch(e){
console.log(e.message);
if (e.message == 'foreach is not defined') {
return;
}
}
2.every
every的遍历会对数组的每一个值执行回调函数中的语句,只有在每一个值都为true时,整个遍历返回值为true,否则为false
var test = arr.every(function (val,idx) {
return (val > 1);
});
console.log(test); //false
3.filter
filter对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组
var arr = [0,1,2,3,4];
var test = arr.filter(function (val,idx) {
return (val > 1);
});
console.log(test); //[2,3,4];
4.map
map会为数组的每一个值去执行代码块,对返回的结果(布尔值)组成一个数组,作为整个遍历的返回值
var arr = [0,1,2,3,4];
var test = arr.map(function (val,idx) {
return (val > 1);
});
console.log(test); //[false, false, true, true, true];
5.some
some方法类似于 || 的逻辑语句判断,会为数组每一个值执行判断语句,只要有一个满足条件,整个遍历的返回值就为true
var arr = [0,1,2,3,4];
var test = arr.some(function (val,idx) {
return (val > 5);
});
console.log(test); //false;
除了以上的书写回调的函数方法,还有两个方法值得学习:
for in 和for of
for in:
var obj = {
name: 'zhangsan',
age: 18
}
for (var item in obj) {
console.log(item); //name age
}
for in可以用来循环对象,item为每个键值对的key,可以使用类似obj[item]的方式得到value
for of:
for(var item of Object.keys(obj)) {
console.log(item + ':' + obj[item]); //name:zhangsan age:18
}
for of可以遍历大多数的类数组对象,但是不支持遍历对象,遍历对象可以使用上面的方法,还有,for of 是在ES6中新添加的方法,注意浏览器的兼容