数组的遍历-js
数组的遍历大概有for、for...in、for...of、forEach、every、map、some、filter、reduce、reduceRight、find、findIndex
12种,分别如下:
1.for循环:(性能挺好)
1 var start = new Date().getTime() 2 var a = 0 3 4 for (var i = 0, j = 1000000; i < j; i++) { 5 a++ 6 } 7 8 var end = new Date().getTime() 9 10 console.log('a: ', a) 11 console.log('历时: ', end - start + 'ms')
结果如图:
2. for...in循环:(考虑到原型的问题,不推荐使用)
1 var arr = Array.from(new Array(1000000), (item, index) => { 2 return index 3 }) 4 var start = new Date().getTime() 5 var a = 0 6 7 for (item in arr) { 8 a++ 9 } 10 11 var end = new Date().getTime() 12 13 console.log('a: ', a) 14 console.log('历时: ', end - start + 'ms')
结果如图:
3. for...of循环:
1 var arr = Array.from(new Array(1000000), (item, index) => { 2 return index 3 }) 4 var start = new Date().getTime() 5 var a = 0 6 7 for (item of arr) { 8 a++ 9 } 10 11 var end = new Date().getTime() 12 13 console.log('a: ', a) 14 console.log('历时: ', end - start + 'ms')
结果如图:
4. forEach循环:(无返回值,即return不生效
)
1 var arr = Array.from(new Array(1000000), (item, index) => { 2 return index 3 }) 4 var start = new Date().getTime() 5 var a = 0 6 7 arr.forEach((item, index) => { 8 a++ 9 }) 10 11 var end = new Date().getTime() 12 13 console.log('a: ', a) 14 console.log('历时: ', end - start + 'ms')
结果如图:
5. every循环:检测数组中的所有元素,是否都符合条件,若一个返回false,则跳出循环,剩下的元素不再循环。every不改变原数组。
1 var arr = Array.from(new Array(1000000), (item, index) => { 2 return index 3 }) 4 5 arr.every((item, index) => { 6 if(item > 10) { 7 return false 8 }else { 9 return true 10 } 11 })
结果如图:
6. map循环:有返回值,返回一个新数组,不改变原数组
。这个新数组是原数组的每个值经过特定的条件处理之后的值组成的新数组。
1 var arr = Array.from(new Array(10), (item, index) => { 2 return index 3 }) 4 5 var newArr = arr.map((item, index) => { 6 return item * 2 7 }) 8 9 console.log('arr: ', arr) 10 console.log('newArr: ', newArr)
结果如图:
7. some循环:遍历数组中的所有元素,只要有一个满足条件,就返回true并且跳出循环,剩下的元素不再遍历。some循环不改变原数组。
1 var arr = Array.from(new Array(100), (item, index) => { 2 return index 3 }) 4 5 arr.some((item, index) => { 6 if(item > 10) { 7 return true 8 } 9 })
结果如图:
8. filter循环:遍历数组中的每一项,筛选出符合条件的元素,然后组成一个新数组返回,不改变原数组。
1 var arr = Array.from(new Array(10), (item, index) => { 2 return index 3 }) 4 5 var newArr = arr.filter((item, index) => { 6 if(item > 5) { 7 return true 8 } 9 }) 10 11 console.log('arr: ', arr) 12 console.log('newArr: ', newArr)
结果如图:
9. reduce循环:接收一个函数作为累加器,把数组的值从左到右依次进行计算,最后合并成一个值。
1 var arr = Array.from(new Array(5), (item, index) => { 2 return index 3 }) 4 5 var newArr = arr.reduce((total, num) => { 6 return total + num 7 }) 8 9 console.log('arr: ', arr) 10 console.log('newArr: ', newArr)
结果如图:
10. reduceRight:接收一个函数作为累加器,把数组的值从右到左依次进行计算,最后合并成一个值。和reduce功能一样,只不过reduceRight是从右至左计算。
1 var arr = Array.from(new Array(5), (item, index) => { 2 return index 3 }) 4 5 var newArr = arr.reduceRight((total, num) => { 6 return total + num 7 }) 8 9 console.log('arr: ', arr) 10 console.log('newArr: ', newArr)
结果如图:
11. find:遍历数组,返回数组中第一个符合条件的值,剩下的值就不再遍历。如果数组的所有值都不符合要求,则返回undefined。find不改变原数组。
1 var arr = Array.from(new Array(5), (item, index) => { 2 return index 3 }) 4 5 var newArr = arr.find((item, index) => { 6 return item > 2 7 }) 8 9 console.log('arr: ', arr) 10 console.log('newArr: ', newArr)
结果如图:
12. findIndex:遍历数组,返回数组中第一个符合条件的值所在的位置(索引),剩下的值不再遍历。如果数组中没有符合条件的值,就返回-1。findIndex不改变原数组。
1 var arr = Array.from(new Array(5), (item, index) => { 2 return index 3 }) 4 5 var newArr = arr.findIndex((item, index) => { 6 return item > 2 7 }) 8 9 console.log('arr: ', arr) 10 console.log('newArr: ', newArr)
结果如图: