裴大头-秦可爱

裴大头-秦可爱

JavaScript的常用遍历方法整理

发表于 2021-07-20
裴大头
阅读量 1408
更新于 2021-07-20

js当中遍历方法有许多,在这记录一下常用的几个遍历方法

::: hljs-center

width: 600px; margin: 2rem

:::

1、普通for循环

自行指定循环次数。

const arr = ['Vue', 'React', 'Angular'];

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

// 打印
// 0 "Vue"
// 1 "React"
// 2 "Angular"
js

2、for…in循环

用于遍历对象的属性(数组的索引值也算属性)。

const obj = {name1: 'Vue', name2: 'React', name3: 'Angular'};

for(item in obj) {
  console.log(item, obj[item])
}

// 打印
// name1 Vue
// name2 React
// name3 Angular
js

但有一个缺点:如果手动向数组添加成员时,索引值会出现问题: 虽然数组的length不变,但用for…in遍历数组会遍历到那些新定义的属性。

const arr = ['Vue', 'React', 'Angular'];

for(item in arr) {
  if(item === '1') {
    arr.splice(item, 0, 'Java')
  }
  console.log(item, arr[item]);
}
console.log(arr)

// 打印
// 0 Vue
// 1 Java
// 2 React
// (4) ["Vue", "Java", "React", "Angular"]
js

3、for…of循环(ES6)

for…of循环修复了for…in存在的问题,他只遍历属于对象本身的属性值。 且这个对象必须是iterable可被迭代的。如Array, Map, Set。

const arr = ['Vue', 'React', 'Angular'];
let map = new Map();
map.set('name1', 'Vue');
map.set('name2', 'React');
map.set('name3', 'Angular');
let set = new Set();
set.add('Vue');
set.add('React');
set.add('Angular');

for(item of arr) {
  console.log(item)
}

for(item of map) {
  console.log(item)
}

for(item of set) {
  console.log(item)
}

// 打印
// Vue
// React
// Angular

// (2) ["name1", "Vue"]
// (2) ["name2", "React"]
// (2) ["name3", "Angular"]

// Vue
// React
// Angular
js

4、forEach循环

循环数组中每一个元素并采取操作,没有返回值,可以不用知道数组长度(也是现在比较常用的遍历方法)。

const arr = ['Vue', 'React', 'Angular'];
let map = new Map();
map.set('name1', 'Vue');
map.set('name2', 'React');
map.set('name3', 'Angular');
let set = new Set();
set.add('Vue');
set.add('React');
set.add('Angular');

arr.forEach((key, value, item) => {
  console.log(key, value, item)
})

map.forEach((key, value, item) => {
  console.log(key, value, item)
})

set.forEach((key, value, item) => {
  console.log(key, value, item)
})

// 打印
// Vue 0 (3) ["Vue", "React", "Angular"]
// React 1 (3) ["Vue", "React", "Angular"]
// Angular 2 (3) ["Vue", "React", "Angular"]

// Vue name1 Map(3) {"name1" => "Vue", "name2" => "React", "name3" => "Angular"}
// React name2 Map(3) {"name1" => "Vue", "name2" => "React", "name3" => "Angular"}
// Angular name3 Map(3) {"name1" => "Vue", "name2" => "React", "name3" => "Angular"}

// Vue Vue Set(3) {"Vue", "React", "Angular"}
// React React Set(3) {"Vue", "React", "Angular"}
// Angular Angular Set(3) {"Vue", "React", "Angular"}
js

这里需要提醒一下,forEach方法不能使用continue和break,使用return语句的作用只能跳出当前循环,并不能跳出整个循环。如果想跳出循环只能throw一个异常。例如:

const arr = ['Vue', 'React', 'Angular'];

try {
    arr.forEach((item) => {
        console.log(item);
        if (item === 'React') {
            throw new Error
        }
    })
} catch {
    console.log('跳出循环')
}

// 打印
// Vue
// React
// 跳出循环
js

接下来是js中Array对象方法

5、map函数

通过指定函数处理数组的每个元素,并返回处理后的数组(不改变原数组)。

const arr = ['Vue', 'React', 'Angular'];

const newArr = arr.map(item => {
  return 'new' + item
})

console.log(newArr)

// 打印
// (3) ["newVue", "newReact", "newAngular"]
js

6、filter函数

检测数值元素,并返回符合条件所有元素的数组。

const arr = ['Vue', 'React', 'Angular'];

const newArr = arr.filter(item => {
  return item.length > 3
})

console.log(newArr)

// 打印
// (2) ["React", "Angular"]
js

还有两个判断符合条件的函数

7、some函数

检测数组元素中是否有元素符合指定条件,返回Boolean值。

const arr = ['Vue', 'React', 'Angular'];

const result = arr.some(item => {
  return item.length > 3
})

console.log(result)

// 打印
// true
js

8、every函数

检测数值元素的每个元素是否都符合条件,返回Boolean值。

const arr = ['Vue', 'React', 'Angular'];

const result = arr.every(item => {
  return item.length > 3
})

console.log(result)

// 打印
// false
js

推荐阅读

1、Vue生命周期 2、整理一下弹性布局知识点 3、推荐一下前端开发时npm源管理工具 4、强力推荐的idea插件,开发效率提升99% 5、初始TypeScript

关注公众号 width:400px;height:150px;

关注贴吧:pei你看雪吧

评论
来发一针见血的评论吧!
表情
  • 裴大头

    男博主

    2022-03-12 11:03

    for···of获取下标方法


    方法一 使用 .entries()


    style="color: #d4d4d4; background-color: #1e1e1e; font-family: Consolas, 'Courier New', monospace; font-size: 16px; line-height: 22px; white-space: pre;">
    let arr = [ style="color: #ce9178;">'a','b','c']

    for (let [ style="color: #9cdcfe;">index,item] style="color: #569cd6;">of arr. style="color: #dcdcaa;">entries()){

      console.log( style="color: #9cdcfe;">index,item)

    }

    //0 "a"

    //1 "b"

    //2 "c"


    方法二 借助 Map


    数组的 for... of 遍历本身获取不了 index,可以先将 Array 转成 Map,再用 for... of 遍历


    style="color: #d4d4d4; background-color: #1e1e1e; font-family: Consolas, 'Courier New', monospace; font-size: 16px; line-height: 22px; white-space: pre;">
    let arr = [ style="color: #ce9178;">'a', 'b', style="color: #ce9178;">'c' ];

    for( let [ style="color: #9cdcfe;">index, item ] style="color: #569cd6;">of new Map(
    arr.map( ( item,
    index )


    => [ style="color: #9cdcfe;">index, item ] ) ) ) {

        console.log( style="color: #9cdcfe;">index, item );

    }

    0 "a"

    1 "b"

    2 "c"


     


     

    1
    回复
    • 基拉

      2023-08-29 14:45

      @裴大头nihoa

      0
      回复
    • 共1条回复,点击查看
  • 秦可爱

    女博主

    2021-11-23 17:29

    9、find()方法

    返回通过测试(函数内判断)的数组的第一个元素的值


    const arr = ['Vue', 'React', 'Angular'];

    let first = arr.find(item => {
    return item.length > 3
    })

    console.log('第一个对象', first)

    // 打印
    // 第一个对象 React


    1
    回复
      共0条回复,点击查看
  • 裴大头

    男博主

    2021-07-22 18:45

    JavaScript reduce() 方法

    reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

    reduce() 可以作为一个高阶函数,用于函数的 compose。

    注意: reduce() 对于空数组是不会执行回调函数的。


    1
    回复
    • 裴大头

      男博主

      2023-08-31 09:41

      @裴大头哈哈哈

      0
      回复
    • 共1条回复,点击查看
  • 裴大头

    男博主

    2021-07-20 16:54

    JavaScript Array对象 资料

    ES6 Map 与 Set 资料


    1
    回复
    • 裴大头

      男博主

      2023-08-31 09:43

      @裴大头哈哈哈

      0
      回复
    • 裴大头

      男博主

      2023-08-31 09:42

      @裴大头哈哈哈

      0
      回复
    • 共2条回复,点击查看
  • 推荐文章
    • JavaScript 的事件循环机制

      1点赞1评论

    • Element UI 级联选择器 el-cascader 实现懒加载和搜索功能

      1点赞0评论

    • Java 23种设计模式——适配器模式(Adapter)

      1点赞0评论

    • Vue项目代码规范

      1点赞1评论

    • Java 23种设计模式——单例模式(Singleton)

      0点赞1评论