js 数组循环遍历方法

 在开发中经常和数组打交道,处理各种逻辑,了解数组遍历的使用方法后,我们要学会在合适的场景使用适合的方法

for循环

1  const arr = [1,2,3,4,5,6,7,8,9] 
2  for (i = 0; len = arr.length; i < len; i++) { 
3       console.log ( arr[i] ) 
4  }

        for遍历数组索引,如果数组中存在空元素,也会执行

        可以使用return、break、continue跳出或中断循环

 

forEach

1 arr.forEach((item, index, arr) = > {
2       console.log ( item ) 
3 })

       可以接收三个参数=> item:数组当前项的值,index:数组当前项的索引,arr:数组对象本身

       forEach无法跳出循环(return、break、continue不起作用)

 

for ... of

 1  const arr = [1,2,3,4,5,6,7,8,9]
 2  for (const item of arr) {
 3       if (item===3) break  
 4       console.log(item) // 1 2
 5  }
 6 
 7 const arr2 = [1,2,3,4,undefined,5,6,7]
 8  for (const item of arr2) {
 9       if (item===6) break  
10       console.log(item) // 1 2 3 4 undefined 5
11  }

       es6支持

       for ... of 与for一样,如果遇到空元素同样会执行

       和for一样可以使用return、break、continue终止循环

       

filter

1 const list = [
2 {id:1, name:'张三', age:18},
3 {id:2, name:'李四', age:22},
4 {id:3, name:'赵六', age:30}
5 ]
6 const result = list.filter((item, index, arr)=>{
7        return  item.age === 22
8 })

          可以接收三个参数=> item:数组当前项的值,index:数组当前项的索引,arr:数组对象本身

          filter配合return返回符合条件的新数组元素不可自定义,不会改变原数组,数组长度和原数组不同

map

1   const list = [
2   {id:1, name:'张三', age:18},
3   {id:4, name:'1111'},
4   {id:2, name:'李四', age:22},
5   {id:3, name:'赵六', age:30}
6   ]
7   const result = list.map((item, index, arr)=>{
8          return  item.age
9   })
console.log(result). // [{id:1, name:'张三', age:18},undefined,{id:2, name:'李四', age:22},{id:3, name:'赵六', age:30}]

          可以接收三个参数=> item:数组当前项的值,index:数组当前项的索引,arr:数组对象本身

          有返回值,可以return出来

          map返回新的数组元素可自定义,不会改变原数组,数组与原来长度一致

 

some

1 const list = [
2    {id:1, name:'张三', age:18},
3    {id:4, name:'1111'},
4    {id:2, name:'李四', age:22},
5    {id:3, name:'赵六', age:30}
6    ]
7    const result = list.some((item, index, arr)=>{
8           return  item.age===22
9    })

           可以接收三个参数=> item:数组当前项的值,index:数组当前项的索引,arr:数组对象本身

           配合return使用,返回布尔值,某一元素满足条件返回true,循环中断,只有所有元素都不满足条件才返回false

every

1 const list = [
2     {id:1, name:'张三', age:18},
3     {id:4, name:'1111'},
4     {id:2, name:'李四', age:22},
5     {id:3, name:'赵六', age:30}
6     ]
7     const result = list.every((item, index, arr)=>{
8           return  !item.age
9     })

             可以接收三个参数=> item:数组当前项的值,index:数组当前项的索引,arr:数组对象本身

             配合return使用,返回布尔值,与some相反,某一元素不满足条件返回false,循环中断,只有所有元素满足条件才返回true

find

1 const list = [
2      {id:1, name:'张三', age:18},
3      {id:4, name:'1111'},
4      {id:2, name:'李四', age:22},
5      {id:3, name:'赵六', age:22}
6      ]
7      const result = list.find((item, index, arr)=>{
8            return  item.age===22
9      })
console.log(result). // {id:2, name:'李四', age:22}

             可以接收三个参数=> item:数组当前项的值,index:数组当前项的索引,arr:数组对象本身

             配合return使用,返回第一个满足条件的元素值,如果不存在返回undefined

 

findIndex

 1 const list = [
 2       {id:1, name:'张三', age:18},
 3       {id:4, name:'1111'},
 4       {id:2, name:'李四', age:22},
 5       {id:3, name:'赵六', age:22}
 6       ]
 7       const result = list.findIndex((item, index, arr)=>{
 8             return  item.age===22
 9       })
10        console.log(result). // 2

                 可以接收三个参数=> item:数组当前项的值,index:数组当前项的索引,arr:数组对象本身

                 配合return使用,用于找出第一个符合条件的数组成员位置(索引),如果没有找到返回-1

reduce

 1   // 数组求和
 2   const list = [
 3   {name:'张三', age:18},
 4   {name:'李四', age:62},
 5   {name:'王二', age:36},
 6   ]
 7   const total = list.reduce((ageTotal, item) =>{
 8         return ageTotal + item.age
 9   },0)
10  console.log(total)  // 116
11 
12 // 数组去重
13   const list = [
14   {name:'王二', age:36},
15   {name:'张三', age:18},
16   {name:'李四', age:62},
17   {name:'王二', age:36},
18   {name:'李四', age:62},
19   ]
20   const obj = {}
21   const result = list.reduce((array, item)=>{
22            if ( obj[item.name] ){
23                  obj[item.age]++
24                  return array
25            }
26            obj[item.name] = 1
27            return [...array, item]
28   },[])
29   console.log(result)   //[{name:'王二', age:36}, {name:'张三', age:18},{name:'李四', age:62}]

            方法接收两个参数,第一个回调函数(callback),第二个是初始值

            其中回调函数接收四个参数:1、表示上一次回调时的返回值,或者初始值,2、表示当前正在处理的数组元素,3、表示当前正则处理的数组元素的索引,若提供初始值,则索引为0,否则索引为1(如果传入值为初始值,将从索引0开始,并从初始值的基础上累计执行回调函数,如果不传入初始值,该方法会从索引1开始执行回调函数),4、表示愿数组

                        

 

posted @ 2022-03-19 17:55  Naynehcs  阅读(696)  评论(0编辑  收藏  举报