for
var arr = [1,2,3,4,5]
for(var i = 1;i < arr.length;i++){
console.log(arr[i])
}
优化for (效率最高)
使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果比较明显
var arr = [1,2,3,4,5]
for(i = 0,len = arr.length;i < len;i++){
console.log(arr[i])
}
forEach(增强for循环)
- forEach循环的次数由数组元素的个数控制,元素是几个就会遍历几次
- 第一个参数表示数组元素,第二个参数表示元素的索引,第三个参数表示数组本身。
- forEach循环中不支持修改索引,回调中使用return不会报错,
但是return无效 - forEach不能使用break跳出循环,但是可以结合try…catch实现跳出循环
var arr = [1,2,3,4,5]
arr.forEach((item,index,arr)=>{
console.log(item)
console.log(arr)
})
let arr = [1,2,3,2,2,4,5,6]
let arr2 = []
arr.forEach((item,index,arr)=>{
arr.indexOf(item) === index ? arr2.push(item) : null;
});
console.log(arr2);
var arr = [1,2,3,4,5]
arr.forEach((item) => {
item = 10
})
console.log(arr)
var arr = [
{a:1,b:1},
{c:2,d:2}
]
arr.forEach((item) => {
item.a = 100
})
console.log(arr)
var arr = [
{c:3,d:{name:"wy"}},
{a:1,b:2}
]
arr.forEach((item) => {
item.d.name = "ddd"
})
console.log(arr)
var arr = [
{c:2,d:{name:'hhh'}},
{c:3,d:{}}
]
arr.forEach((item) => {
item.d.name = "wy"
})
console.log(arr)
var arr = [[1,2],[3,4]];
arr.forEach((item)=>{
item[0] = 100;
})
console.log(arr);
try{
let arr = [1,2,3,5,6,7];
arr.forEach((item)=>{
if(item === 3){
throw new Error("LoopTerminates")
}
console.log(item);
})
}catch(e){
if(e.message !== "LoopTerminates") throw e;
}
for…in… (效率最低)
for…in…循环效率最低,输出的key是数组索引,如果遍历的是对象,输出的则是对象的属性名
var arr = ['开','开','心','心'];
for(let key in arr){
console.log(key)
}
var objArr = {
a:11,
b:22,
c:33
}
for(let key in objArr){
console.log(key)
}
for…of…(ES6)
for of 遍历的是value ,for of 不能循环对象, 虽然性能要好于 for…in…,但仍然比不上普通的 for 循环
var arr = ['开','开','心','心'];
for(let valuein arr){
console.log(value)
}
map(ES6)
- 遍历每一个元素并且返回对应的元素(可以返回处理后的元素)
- 返回创建的新数组和原来旧数组的长度是一样的,使用比较广泛,但性能还不如 forEach
- 不能使用break和continue跳出整个循环或当前循环的,会报错,但是结合try…catch可以实现跳出循环
var arr = [1, 2, 3, 4, 5, 6]
var newArr = arr.map(function (item, idnex) {
return item * item
})
console.log(arr)
console.log(newArr)
var arr = [{a: 1, b: 2},{a: 3, b: 4}]
let newArr = arr.map((item)=>{
item.b = 100
return item
})
console.log('arr',arr)
console.log('newArr ',newArr )
try {
var arr = [1, 2, 3, 4];
arr.map((item) => {
if (item === 3) {
throw new Error("LoopTerminates");
}
console.log(item);
return item
});
} catch (e) {
if (e.message !== "LoopTerminates") throw e;
};
filter(ES6)
遍历数组,过滤出符合条件的元素并返回一个新数组,没有符合条件的元素则返回空数组
var arr = [
{id:1,sex:false,user:'A'},
{id:2,sex:true,user:'B'},
{id:3,sex:true,user:'C'},
]
var newArr = arr.filter((item,index) => {
return item.sex;
})
console.log(newArr)
some(ES6)
遍历数组,只要有一个元素满足条件 就返回 true,否则返回 false
var arr = [
{id:1,sex:false,user:'A'},
{id:2,sex:true,user:'B'},
{id:3,sex:true,user:'C'},
]
var flag = arr.some((item)=>{
return item.sex;
})
console.log(flag)
erevy (ES6)
遍历数组,每一个元素都满足条件 则返回 true,否则返回 false
var arr = [
{id:1,sex:false,user:'A'},
{id:2,sex:true,user:'B'},
{id:3,sex:true,user:'C'},
]
var flag = arr.every((item)=>{
return item.sex;
})
console.log(flag)
find(ES6)
遍历数组,返回符合条件的第一个元素,如果没有符合条件的元素则返回undefined
var arr = [1, 1, 2, 2, 3, 3, 4, 5, 6]
var num = arr.find(function (item, index) {
return item === 3
})
console.log(num)
findIndex(ES6)
遍历数组,返回符合条件的第一个元素的索引,如果没有符合条件的元素则返回 -1
var arr = [1, 1, 2, 2, 3, 3, 4, 5, 6]
var num = arr.findIndex(function (item) {
return item === 3
})
console.log(num)
|