JS数组四种for循环写法
前⾔
前端开发中经常涉及到数组的相关操作:去重、过滤、求和、数据⼆次处理等等。都需要我们对数组进⾏循环。为了满⾜各种需求,JS除了提供最简单的for循环,在ES6和后续版本中也新增的诸如:map、filter、some、reduce等实⽤的⽅法。
各个⽅法都有他们的应⽤场景,过分追求性能,往往会忽略语义和可读性。
冷静地分析⼀下,如果只谈性能,显然是 for > forEach > map
为什么 for 的性能⽐较好?读⼀下 forEach 和 map 的规范就知道了。
⾄于foreach和map,map 会返回⼀个等长数组,forEach 不会,所以 forEach ⼤于 map。
但是哪个更快,和哪个更合适,并不应该划等号:
如果需要将数组按照某种规则映射为另⼀个数组 ☞ map
如果需要进⾏简单的遍历 ☞ forEach 或者 for of
如果需要对迭代器进⾏遍历 ☞ for of
js合并两个数组如果需要过滤出符合条件的项 ☞ filter
如果需要先按照规则映射为新数组,再根据条件过滤 ☞ map + filter。
但是遇到明确强调性能的场景,依旧是推荐使⽤for,for的性能应该是⽏庸置疑的。
for循环的四种写法
const persons = ['1', '2', '3', '4', '5', '6']
// ⽅法⼀
for (let i = 0; i < persons.length; i++) {
console.log(persons[i])
}
// ⽅法⼆
for (let i = 0, len = persons.length; i < len; i++) {
console.log(persons[i])
}
// ⽅法三
for (let i = 0, person; person = persons[i]; i++) {
console.log(person)
}
// ⽅法四
for (let i = persons.length; i--;) {
console.log(persons[i])
}
第⼀种⽅法是最常见的⽅式,不解释。
第⼆种⽅法是将persons.length缓存到变量len中,这样每次循环时就不会再读取数组的长度。
第三种⽅式是将取值与判断合并,通过不停的枚举每⼀项来循环,直到枚举到空值则循环结束。执⾏顺序是:
第⼀步:先声明索引i = 0和变量person
第⼆步:取出数组的第i项persons[i]赋值给变量person并判断是否为
第三步:执⾏循环体,打印person
第四步:i++。
当第⼆步中person的值不再是时,循环结束。⽅法三甚⾄可以这样写
for (let i = 0, person; person = persons[i++];) {
console.log(person)
}
复制代码
第四种⽅法是倒序循环。执⾏的顺序是:
第⼀步:获取数组长度,赋值给变量i
第⼆步:判断i是否⼤于0并执⾏i--
第三步:执⾏循环体,打印persons[i],此时的i已经-1了
从后向前,直到i === 0为⽌。这种⽅式不仅去除了每次循环中读取数组长度的操作,⽽且只创建了⼀个变量i。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论