1:for

/* for(初始值; 判断表达式; 自增/自减){ }
*/
for (let i = 0; i < len; i++) {do something....
}

2:for...in

用途:遍历对象、数组

不推荐遍历数组,效率低

/* for(let 变量 in object/array){ }
*/
let obj = {name: '小王',age: 24
}
// 遍历对象
for (let i in obj) {console.log(i); // keyconsole.log(obj[i]); // value
}
// 遍历数组
for (let j in arr) {console.log(j) // index下标console.log(arr[j]) // value
}

3:for...of

用途:遍历对象、字符串

let str = 'aabbcdgsf';
for (let i of arr) {console.log(i); // value
}
for (let j of str) {console.log(j); // 单个字符
}

4:forEach
 * 无法正常跳出循环,可使用抛异常结合异常捕获跳出循环
 * return、break、continue无效

/*** forEach* item => 当前项 index => key(索引) resArr => 原始数组*/
arr.forEach((item, index, resArr) => {console.log(item);   // { id: 1, name: '小明'}, { id: 2, name: '小李'}....console.log(index);  // key索引/下标console.log(resArr); // 原始数组
})

5:map

* 有返回值、使用return返回
 * 克隆原数组、并修改克隆数组数据、可使用变量接收

let arr2 = [1, 20, 10]
arr2.map((item, index, resArr) => {// do something...return item
})
let newArr = arr2.map(item => {return item * 2
})
console.log(newArr) // [2, 20, 40] map返回最终数组
console.log(arr2);  // [1, 10, 20] 原数组(无变化)

6:filter
 * 不改变原数组、 返回新数组

/*** filter* Array.filter((当前项, 索引, 原始数组) => {})*/
let filterArr = [{ id: 1, age: 20 }, { id: 2, age: 18 }];
// let newArr = filterArr.filter(item => item.age >= 19);
let newArr = filterArr.filter((item, index, resArr) => {return item.age >= 19
})
console.log(newArr); // [{id: 1, age: 20}]
console.log(filterArr); // [{ id: 1, age: 20 }, { id: 2, age: 18 }];

7:every

* 不改变原数组, 返回值为boolean值
 * 对数组每一项运行给定函数,如果该函数对每一项返回true则返回true,否则返回false

let everyArr = [1, 2, 3, 4];
let flag = everyArr.every((item) => {return item > 2
});
let flag2 = everyArr.every((item) => {return item > 0
});
console.log(flag); // false
console.log(flag2); // true

8:some

对每一项运行指定函数, 该函数对某一项返回true,则返回true,否则返回false

let someArr = [1, 2, 3, 4];
let flag3 = someArr.every((item) => {return item > 2
});
let flag4 = someArr.every((item) => {return item > 0
});
let flag5 = someArr.every((item) => {return item > 6
});
console.log(flag3); // true
console.log(flag4); // true
console.log(flag5); // false

9:find

* 不改变原数组, 返回值为当前项或undefined
 * 返回数组中符合条件的第一个元素,否则返回undefined

let findArr = [{ id: 1, name: '小明', age: 20 },{ id: 2, name: '小李', age: 22 },{ id: 3, name: '小红', age: 22 }
];
// ES5
function getName(item) {return item.name == '小明'
}
let es5Res = findArr.find(getName);
console.log(es5Res); // {id: 1, name: '小明', age: 20}
// ES6
let res = findArr.find(item => item.name == '小明');
let res2 = findArr.find(item => item.name == '小小明');
console.log(res); // {id: 1, name: '小明', age: 20}
console.log(res2); // undefined

10:findIndex

* 不会改变数组对象, 返回值为索引值或-1
 * 对于数组中的每个元素,findIndex 方法都会调用一次回调函数(采用升序索引顺序),
 * 只要有一个元素返回 true时停止执行,并返回当前项索引值。
 * 否则返回 -1

let indexArr = [1, 3, 4];
console.log(indexArr.findIndex(item => item == 3)); // 1
console.log(indexArr.findIndex(item => item == 5)); // -1

11:keys()、values()、entries()

/*** keys()     遍历键名* values()   遍历键值* entries()  遍历键值对* 可搭配for...of使用*/let keyArr = ['a', 'b']
for (let i of keyArr.keys()) {console.log(i); // 0、1
}
for (let i of keyArr.values()) {console.log(i); // 'a'、'b'
}
for (let i of keyArr.entries()) {console.log(i); // [0, 'a']、 [1, 'b']
}

12:reduce

/*** reduce* arr.reduce(callback, [initialValue])* callback参数:*      previousValue: 上次调用返回值 或 initialValue *      currentValue : 数组中当前被处理的元素*      index:         索引*      arrar:         调用resuce的数组*/
let reduceArr = [1, 2, 5, 10];
let sum = reduceArr.reduce((a, b) => a + b);
console.log(sum);
// 示例:// 1: 没有提供initialValue
let arr = [1, 4, 5, 10];
let sum = arr.reduce((prev, curr, index) => {console.log('prev:', prev, 'curr:', curr, 'key:', index);/*prev: 1 curr: 4 key: 1prev: 5 curr: 5 key: 2prev: 10 curr: 10 key: 3*/return prev + curr;
})
console.log(sum) // sum => 20// 2: initialValue 赋值
let arr = [1, 4, 5, 10];
let sum = arr.reduce((prev, curr, index) => {console.log('prev:', prev, 'curr:', curr, 'key:', index);/*prev: 0 curr: 1 key: 0prev: 1 curr: 4 key: 1prev: 5 curr: 5 key: 2prev: 10 curr: 10 key: 3*/return prev + curr;
}, 0)
console.log(sum) // sum => 20
// 结论:initialValue不存在时,计算时从索引值0开始,否则从initialValue开始

学习时候刚好看到遍历,特意查询所有常见遍历方法进行整合,如有错误之处,请指出,谢谢

reduce部分暂未掌握,一些更深层的理解后续还有更新

javascript遍历方法相关推荐

  1. javascript同级遍历_有用的DOM遍历方法,你需要了解一下

    英文 | https://levelup.gitconnected.com/useful-dom-traversal-methods-d2b55cf8e25c翻译 | web前端开发(ID:web_q ...

  2. 你可能不知道的JavaScript 遍历DOM的几种方法

    最近看到一篇关于前端优化方面的文章,里面提到了几点对DOM遍历操作的优化,文章只是一笔带过,并没有深入的讲解. 其中提到了几个优化的手段,乍一看似乎没见过,然后再仔细想想,其实无论是犀牛书还是红宝书都 ...

  3. JavaScript 数组遍历方法的对比

    前言 JavaScript 发展至今已经发展出多种数组的循环遍历的方法,不同的遍历方法运行起来那个比较快,不同循环方法使用在那些场景,下面将进行比较: 各种数组遍历的方法 for 语句 代码: var ...

  4. JavaScript 数组方法 遍历

    JavaScript 数组方法 创建一个数组 Concat()连接两个或更多的数组 并返回结果   join()用指定分隔符分隔数组并转换为字符串 Push()可向数组的末尾添加一个或多个元素,并返回 ...

  5. JavaScript算法总结 数组 字符串 遍历方法总结

    JavaScript基础算法 一.数组常用方法 1.push() 在尾部追加,类似于压栈,原数组会变. const arr = [1, 2, 3] arr.push(8) console.log(ar ...

  6. 最全 JavaScript Array 方法 详解

    大家好,我是若川.最近组织了源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列> ...

  7. JS数组与对象的遍历方法大全

    本文简单解析各种数组和对象属性的遍历方法: 原生for循环.for-in及forEach ES6 for-of方法遍历类数组集合 Object.key()返回键名的集合 jQuery的$.each() ...

  8. chararray遍历_数组常用的遍历方法 ——总结

    看图了解数组常用的方法 前言 本文主要介绍数组常见遍历方法:forEach.map.filter.find.every.some.reduce,它们有个共同点:不会改变原始数组. 一.forEach: ...

  9. jQuery操作Dom元素、jQuery遍历、JavaScript遍历

    目录 jQuery操作Dom元素 jQuery遍历几种方式 JavaScript遍历 jQuery操作Dom元素 jQuery的主要用法为"选择某个dom元素,再对其进行某种操作" ...

最新文章

  1. Rocksdb 的 BlobDB key-value 分离存储插件
  2. java int 127_Integer类型中奇怪的127和128
  3. C# 大型对象堆学习总结
  4. 一颗钉子能承受多大的重量?
  5. css里slidebottom,jquery - 从CSS“top”到“bottom”的jQuery动画 - 堆栈内存溢出
  6. php下载页下载隐藏真实文件地址,php如何隐藏实际文件下载地址
  7. PyTorch 1.0 中文文档:自动求导机制
  8. div iframe 显示html,IE中iframe标签显示在DIV之上的问题解决方案
  9. Soul网关源码阅读(九)插件配置加载初探
  10. 彻底搞懂Scrapy的中间件(三)
  11. apicloud 请删除手机中的apploader后在尝试
  12. 【4】基于深度神经网络的脑电睡眠分期方法研究(训练模型)
  13. php 解析p2p节目源,P2P加速解析与伪一次解析源码教程
  14. 案例推荐《微博:随时随地迎战大流量》
  15. 咖啡产地及如何鉴赏评价
  16. php检查浏览器是否有cookie,php – 检查是否启用了Cookie
  17. 母牛的故事【HDOJ2018】
  18. macOS iOS 完整项目之全功能RSS阅读器 (教程含源码)
  19. 高斯核——Python实现
  20. 看雪题库REVERSE的马到成功

热门文章

  1. Android 优秀文章收集整理集合
  2. 液晶显示器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  3. 父亲节送礼!购机推荐iQOO Neo6 SE与红米Note 11T Pro
  4. Infopath入门到精通系列-4 Infopath myschema.xsd文件 解析
  5. 【Neuralink 与大脑的神奇未来】Part 4:Neuralink 的挑战
  6. shell-定时备份数据库发送至邮箱
  7. 构建自动化运维平台:PAS工具和方法
  8. 为什么计算机编程以英语为主,为什么做编程都用英文,中文不行吗?听程序员解释完,总算明白了...
  9. Fatal error: Uncaught Error: Call to undefined function mysqli_content() in D:\phpstudy_pro\WWW\user
  10. C ——进程内存(内存管理、内存分配(brk,sbrk、mmap、munmap)、内存常见错误)