整理JavaScript循环数组和对象的方法



众所周知,常用的循环语句有for、while、do-while、for-in,forEach以及jQuery中提供的循环的方法;以及ES6中提供的很多用来循环对象的方法如map,

  在 Javascript 中,当某些条件得到满足时,用 break 语句来中断一个循环的运行。(请注意,也用 break 语句退出一个 switch 块。参见 Javascript 条件语句)。如果是一个 for 或者 for...in 循环,在更新计数器变量时使用 continue 语句越过余下的代码块而直接跳到循环的下一次重复中。

复制代码

//数组长度
let len = 200;//准备测试数组
let arr = new Array();for (let i = 0 ; i < len; i++){
    arr.push("abc"+i);
}

复制代码

第一部分:循环数组的方法

1、for循环

复制代码

//正向for循环
for(let i = 0, len = arr.length; i < len; i++){
    let value = arr[i];
}//反向for循环
for(let i = arr.length; i > 0; i--){
    let value = arr[i];
}

复制代码

2、while循环

复制代码

let i = 0;
let len = arr.length;while(i < len){
    let value = arr[i];
    i++;
}

复制代码

3、do-while循环

复制代码

let i = 0;
let len = arr.length;do{
    let value = arr[i];
    i++;
}while(i < len);

复制代码

4、for-in循环

//循环数组时for-in循环相对性能很差,其主要用于循环对象。
for(let item in arr){
    let value = item;
}

5、forEach方法

复制代码

//这个方法执行是没有返回值的,对原来数组也没有影响;
//forEach方法中的this是原数组,匿名回调函数中的this默认是window;
let res = arr.forEach((val, ind, input)=>{
    let value = val;    //数组的每一项的值
    let index = ind;    //数组的索引值
    let array = input;  //原数组
    input[ind] = val*10;    //可以改变原数组 
})
console.log(arr);//原数组已经改变
console.log(res);//undefined

复制代码

6、map方法

复制代码

//map:和forEach非常相似,都是用来遍历数组中的每一项值的,用来遍历数组中的每一项;
//区别:map的回调函数中支持return返回值;
//return的是什么,相当于把数组中的这一项变为什么
//(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了);
//不管是forEach还是map 都支持第二个参数值,第二个参数的意思是把匿名回调函数中的this进行修改。
let res = arr.map((val, ind, input)=>{
    let value = val;    //数组中的每一项的值
    let index = ind;    //数组的索引
    let array = input;  //原数组
    return val*10;      //数组中的每一项return出去为map方法的返回值})
console.log(arr);//原数组未改变
console.log(res);//原数组改变后的数组

复制代码

注:不管是forEach还是map在IE6-8下都不兼容(不兼容的情况下在Array.prototype上没有这两个方法),那么需要我们自己封装一个都兼容的方法,代码如下:

复制代码

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

复制代码

7、jQuery中遍历数组的方法$.each()

$.each(arr, (ind, val)=>{
    let index = ind;//数组中每一项的索引
    let value = val;//数组中每一项的值
})

第二部分:循环对象的方法

复制代码

//对象中键值对个数
let len = 200;//准备测试数组
let obj = new Object();for (let i = 0 ; i < len; i++){
    obj[`index${i}`] = `value${i}`;
}

复制代码

1、for-in用来遍历非数组对象

for(let ind in obj){
    let index = ind;    //对象中的每一项的键名
    let value = obj[ind];   //对象中的每一项的值
}

2、jQuery中遍历对象的方法$.each()

$.each(obj, (ind, val)=>{
    let index = ind;    //对象中每一项的键名
    let value = val;    //对象中每一项的值
})

3、ES6新提供的对象的遍历方法



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值