016 数组遍历详解

90 阅读3分钟

数组遍历详解

      const arr = [
        {
          name: 'tom',
          age: 18
        },
        {
          name: 'jack',
          age: 19
        },
        {
          name: 'rose',
          age: 20
        },
      ]

1. for循环遍历

最简单基础的循环遍历方法,也是使用最频繁的方法。

for (let i = 0; i < arr.length; i++) {
    console.log(arr[i])
}

/*
{name: 'tom', age: 18}
{name: 'jack', age: 19}
{name: 'rose', age: 20}
*/

2. for...of遍历

// arr 遍历的数组
// item 遍历的数组的元素
for(let item of arr) {
    console.log(item)
}
/*
{name: 'tom', age: 18}
{name: 'jack', age: 19}
{name: 'rose', age: 20}
*/

3. forEach() 遍历

**forEach()**本质上等同于for循环,对每一项执行function函数。forEach改变原数组。

第一个参数是数组里的当前元素,第二个参数是数组当前元素的索引。

arr.forEach((item,index) => {
    console.log(index,item)
    item.age++
})
console.log(arr)
/*
0 {name: 'tom', age: 18}
1 {name: 'jack', age: 19}
2 {name: 'rose', age: 20}
[
	{name: 'tom', age: 19},
	{name: 'jack', age: 20},
	{name: 'rose', age: 21},
]
*/

4. map()

**map()**方法返回一个新数组,新数组中的元素为原始数组元素调用函数处理后的值。

map()方法按照原始数组顺序一次处理元素。

不会改变原始数组,会返回一个新的数组。

let newArr = arr.map((item,index) => {
    return item.age++
})
console.log(arr)
console.log(newArr)
/*
[
	{name: 'tom', age: 18},
	{name: 'jack', age: 19},
	{name: 'rose', age: 20},
]

[18, 19, 20]
*/

5. filter()

方法创建一个新的数组,新数组的元素是通过检查指定数组中符合条件的所有元素。

不会改变原始数组。

      let tempArr = arr.filter(item => {
        if (item.age == 19) {
          return item
        }
      })
      console.log(arr);
      console.log(tempArr);
/*
[
	{name: 'tom', age: 18},
	{name: 'jack', age: 29},
	{name: 'rose', age: 20},
]
[
	{name: 'jack', age: 19},
]
*/

6. find()

遍历数组,返回符合条件的第一个元素,如果没有符合条件的元素则返回undefined。

let newArr = arr.find(item=>{
    return item.age == 19
})
let tempArr = arr.find(item=>{
    return item.name == 'wang'
})
console.log(arr)
console.log(newArr)
console.log(tempArr)
/*
[
	{name: 'tom', age: 18},
	{name: 'jack', age: 29},
	{name: 'rose', age: 20},
]

{name: 'jack', age: 19}

undefined
*/

7. findIndex()

遍历数组,返回符合条件的第一个元素的索引,如果没有符合条件的元素则返回 -1。

let newArr = arr.findIndex(item=>{
    return item.age == 20
})
let tempArr = arr.findIndex(item=>{
    return item.name == 'wang'
})
console.log(arr)
console.log(newArr)
console.log(tempArr)

/*
[
	{name: 'tom', age: 18},
	{name: 'jack', age: 29},
	{name: 'rose', age: 20},
]
2
-1
*/

8. some()

遍历数组,只要有一个以上的元素满足条件就返回true,否则返回false,退出循环。

let newArr = arr.some(item=>{
    return item.age == 20
})
let tempArr = arr.some(item=>{
    return item.name == 'wang'
})
console.log(arr)
console.log(newArr)
console.log(tempArr)

/*
[
	{name: 'tom', age: 18},
	{name: 'jack', age: 29},
	{name: 'rose', age: 20},
]
true
false
*/

9. every()

遍历数组,每一个元素都满足条件,则返回true,否则返回false

const arr = [
        {
          name: 'tom',
          age: 18,
          height: 180
        },
        {
          name: 'jack',
          age: 19,
          height: 180
        },
        {
          name: 'rose',
          age: 20,
          height: 180
        },
      ]
let temp = arr.every(item=>{
    return item.age == 18
})
let tempArr = arr.every(item=>{
    return item.height == 180
})

console.log(temp)
console.log(tempArr)

/*
false
true
*/

10.reduce()

reduce() 方法对数组中的每个元素按顺序执行,每次运行会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。

const list = [1, 2, 3, 4, 5]
let temp = reduce((total,item)=>{
    total + item
})
console.log(temp) // 15

11. reduceRight()

reduceRight() 方法的功能和 reduce() 功能是相同的,不同的是reduceRight() 是从数组的末尾向前将数组中的数组项做累加。

const list = [1,2,3,4,5]
let temp = list.reduceRight((total,item) => {
    total + item
})
console.log(temp)  // 15

12. fill()

  const list = [
    {
      name: 'tom',
      age: 18,
      height: 180
    },
    {
      name: 'jack',
      age: 19,
      height: 180
    },
    {
      name: 'rose',
      age: 20,
      height: 180
    },
  ]
  let temp = list.fill({
    color: 'red'
  })
  console.log(temp);
/*
[
{color: 'red'},
{color: 'red'},
{color: 'red'},
]
*/