欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS遍历数组的多种方式

程序员文章站 2022-07-15 08:18:18
...

JS遍历数组的多种方式

1. 普通for循环

for  (let i = 0; i < arr.length; i++){
        //code}

应用最为普遍的循环写法,性能好,可读性好。

2. 优化版for循环

for( let i = arr.length;i > 0; i--){
           //code}

优点:性能比普通for循环好,省去了每次对于数组长度的判断。
缺点:对于长度可能会产生变动的数组,这种方法不适用,可能会导致有的值没被遍历到等错误。

3. for in循环

for(let index in arr) {
    //如果arr是数组,index为索引
    //如果arr是对象,index为属性
};

for in循环本来是用来遍历对象的属性的,因为数组是特殊的对象,因此也可以用来遍历,需要注意的是,index在数组和对象中表示的含义是不同的,在对象中,index代表属性,在数组中,index代表索引。
另外在遍历对象时,for in会将原型链上的属性也遍历一遍,如果你不需要原型链上的属性,你可以在循环体执行之前进行一次判断,如下

if(!arr.hasOwnProperty(index)){ 
continue; 
} 

4. forEach循环

arr.forEach(function(value,index,arr){
   value;//当前值
   index;//当前索引
   arr;//原数组
});

优点:提供的三个参数可以很大程度上减少代码长度,可读性好。
缺点:无法遍历对象, 在IE9以上才能使用,而且无法使用 break,continue 跳出循环,使用 return 是跳过本次循环。
5. map方法

arr.map(function (item,index,arr) {
       return item*10//可以使用return语句来改变相应位置的元素
})

使用方法和forEach十分相似,优缺点也是相似的,IE9+才能使用,如果想在低版本IE运行,可以在原型里添加方法,如下

/**
 1. map遍历数组
 2. @param callback [function] 回调函数;
 3. @param context [object] 上下文;
*/
Array.prototype.myMap = function myMap(callback,context){
    context = context || window;
    if('map' in Array.prototye) {
        return this.map(callback,context);
    }
    //IE6-8下自己编写回调函数执行的逻辑
    var newAry = [];
    for(var i = 0,len = this.length; i < len;i++) {
        if(typeof  callback === 'function') {
            var val = callback.call(context,this[i],i,this);
            newAry[newAry.length] = val;
        }
    }
    return newAry;
}

需要注意的是map方法返回的是一个新的数组,不会改变之前的数组
而且map方法是可以使用return语句的
5. for of循环

for (var value of arr) {
  //code
}

优点:简洁,可以使用break、continue、return等语句,可以遍历数组、对象、DOM节点数组、Set对象等等
缺点:属于ES6的语法内容,使用时应注意兼容性。

番外

6. JQuery中的each方法

$.each(arr,function(index,value){
     //code
});

优点:既可以遍历数组,也可以遍历对象,jQuery对于方法进行了改进,一些语句可以跳出循环:
return false:将停止循环 (就像在普通的循环中使用 ‘break’)。
return true:跳至下一个循环(就像在普通的循环中使用’continue’)。
7. JQuery中的map方法

var example=$.map(function(index, item){
    // 函数内部的this === item
    return this.value;//可以使用return语句  )};

优点:可以遍历数组和对象,返回值是一个新的jQuery对象,使用get()方法可以获得原生数组
只需使用example.get()即可。
在内部的回调函数function中的返回值作为新数组的每一项成员,如果返回值为null或者undefined则保留原数组的原始值不变。
本文提供了JS遍历数组7种方式,5种原生方法,应该足够在绝大多数场合满足各种需求了,各位读者可以按照需求和偏好自行选择,感谢您的阅读!(完)