JavaScript常用的数组和对象遍历方法


数组和对象遍历中的一些方法和区别

这篇文章主要归纳一下JavaScript数组和对象遍历中的一些方法和区别

一、数组遍历比较

在这里插入图片描述

  • for、forEach、for…of
  • some、every
  • fiter、map
  • find、findindex
  • reduce
for、forEach、for…of的区别
  1. 三者都是基本的由从左到右遍历数组
  2. forEach无法跳出循环,for和for…of可以使用break或者continue来终止循环
  3. for…of直接访问的是实际元素,for遍历数组索引,forEach回调函数参数更丰富,元素、索引,遍历的数组
  4. for…of与for如果数组中存在空元素,同样会执行。
    代码展示和运行结果
  <script>
    // 1. 三者都是基本的由从左到右遍历数组
    // 2. forEach无法跳出循环,for和for...of可以使用break或者continue来终止循环
    // 3. for...of直接访问的是实际元素,for遍历数组索引,forEach回调函数参数更丰富,元素、索引,遍历的数组
    // 4. for...of与for如果数组中存在空元素,同样会执行。
    var arr=['a','b','c','d']
    // 声明一个数组arr,然后对数组进行遍历
    console.log('以下是for循环遍历结果');
    for(let i=0;i<arr.length;i++){
      console.log(i,arr[i])
    }
    console.log('以下是for...of循环遍历结果');
    for(var item of arr){
      console.log(item)
    }
    console.log('以下是forEach循环遍历结果');
    arr.forEach(function(item,index,array){
      console.log(item,index,array)
    })
  </script>

在这里插入图片描述
在数组中添加一个空元素,然后执行结果如下所示

   var arr=['a','b',,'c','d']

在这里插入图片描述
for、forEach、for…of这三种方式,都是遍历数组的方法,根据实际的场景自己选择使用那个方法,如果信息比较多,那么可以选择forEach,如果只是单纯的取到实际的元素,那么可以使用for…of

some、every的区别
  1. 二者都是用来做数组条件判断的,都是返回一个布尔值。
  2. some若一元素满足条件,返回true,循环中断,所有元素不满足条件,返回false
  3. every 与some相反,若有一个元素不满足,返回false,循环中断,所有元素都满足返回true
    代码展示和运行结果
  <script>
   // 1. 二者都是用来做数组条件判断的,都是返回一个布尔值。
   // 2. some若一元素满足条件,返回true,循环中断,所有元素不满足条件,返回false
   // 3. every 与some相反,若有一个元素不满足,返回false,循环中断,所有元素都满足条件返回true
   // 判断数组当中的元素是否复合某些条件
   var arr=[27,31,-1,56,15,3]
   console.log("以下是some循环条件判断结果")
   var flag=arr.some(function(item){
     return item > 0;
   })
   console.log(flag)
   console.log("以下是every循环条件判断结果")
   var result=arr.every(function(item){
     return result > 0;
   })
   console.log(result)
 </script>

在这里插入图片描述

fiter、map的区别
  1. 二者都是生成一个新数组,都不会改变原数组不包括遍历对象和数组时,在回调函数中操作的元素对象。
  2. 二者都会跳过空元素
  3. map会将回调函数的返回值组成一个新数组,数组长度与原数组一致
  4. filter会将复合回调函数条件的元素组成一个新数组
  5. filter可以想象成过滤数组元素(符合条件要求的)
  6. map 变换数组元素(遍历元素的同时,将元素进行变换)
    代码展示和运行结果
  <script>
    // 1. 二者都是生成一个新数组,都不会改变原数组不包括遍历对象和数组时,在回调函数中操作的元素对象。
    // 2. 二者都会跳过空元素
    // 3. map会将回调函数的返回值组成一个新数组,数组长度与原数组一致
    // 4. filter会将复合回调函数条件的元素组成一个新数组

    // filter可以想象成过滤数组元素(符合条件要求的)
    // map 变换数组元素(遍历元素的同时,将元素进行变换)
    var arr=[1,2,3,4,5,6,7,8]
    console.log("以下是filter循环的生成的结果")
    var resArr1=arr.filter(function(item){
      return item > 5
    })
    console.log(resArr1)
    console.log("以下是map循环的生成的结果")
    var resArr2=arr.map(function(item){
      return item * 10
    })
    console.log(resArr2)
  </script>

在这里插入图片描述

find、findindex的区别
  1. 二者都是用来查找元素
  2. find方法放回数组man粗callback函数的第一个元素的值。如果不存在返回undefined
  3. findIndex它返回数组中找到的元素索引,而不是其值,若郭不存在返回-1
    遍历查找元素
  <script>
  // 1. 二者都是用来查找元素
  // 2. find方法放回数组man粗callback函数的第一个元素的值。如果不存在返回undefined
  //  3. findIndex它返回数组中找到的元素索引,而不是其值,若郭不存在返回-1
  // 遍历查找元素
    var arr=[1,2,3,4,5,6,7,8]
    console.log("以下是find循环的查找的结果")
    var resArr1=arr.find(function(item){
      return item > 5
    })
    console.log(resArr1)
    var resArr2=arr.find(function(item){
      return item > 8
    })
    console.log(resArr2)
    console.log("以下是findIndex循环的查找满足元素的索引结果")
    var resArr3=arr.findIndex(function(item){
      return item > 5
    })
    console.log(resArr3)
    var resArr4=arr.findIndex(function(item){
      return item > 8
    })
    console.log(resArr4)
  </script>

在这里插入图片描述

reduce(非常强大一个方法)

在这里插入图片描述

  1. reduce方法接收俩个参数,第一个参数是一个回调函数(callback),第二个参数是初始值(initialValue)
  2. 回调函数接收四个参数:
  • accumulator:他是截止到当前元素,之前的所有数组元素被回调函数处理累计的结果
  • current:当前被执行的数组元素
  • currentIndex:当前被执行的数组元素索引
  • sourceArray:原数组,也就是调用reduce方法的数组
    如果不传入初始值,reduce方法会从索引1开始执行回调函数,如果传入初始值,将从索引0开始,并从初始值的基础上累积执行回调
    遍历
  <script>
  // 1. reduce方法接收俩个参数,第一个参数是一个回调函数(callback),第二个参数是初始值(initialValue)
  // 回调函数接收四个参数:
  // accumulator:他是截止到当前元素,之前的所有数组元素被回调函数处理累计的结果
  // current:当前被执行的数组元素
  // currentIndex:当前被执行的数组元素索引
  // sourceArray:原数组,也就是调用reduce方法的数组
  // 如果不传入初始值,reduce方法会从索引1开始执行回调函数,如果传入初始值,将从索引0开始,并从初始值的基础上累积执行回调
    //有初始值
    var arr=[1,2,3,4,5,6,7,8]
    console.log("以下是reduce的结果")
    arr.reduce(function(total,cur,curIdx,array){
      console.log(cur,curIdx,array)
    },0)
    //无初始值
    arr.reduce(function(total,cur,curIdx,array){
      console.log(cur,curIdx,array)
    })
  </script>

有初始值运行结果
在这里插入图片描述
无初始值运行结果

在这里插入图片描述

reduce的第一个形参的作用

实现累加代码

    // total第一个形参的作用
    console.log("以下是reduce累加的结果")
    var res=arr.reduce(function (total, cur) {
      return total+cur
    },0)
    // 以上代码分析初始值是0,cur是每次遍历的值,total默认就是初始值0 返回的值会给total然后继续遍历累加
    console.log(res)

在这里插入图片描述
利用reduce求数组最大值最小值

    console.log("以下是利用reduce求数组最大值最小值结果")
    var min=arr.reduce(function (minNum, cur) {
      return minNum<=cur?minNum:cur
    },0)
    var max=arr.reduce(function (maxNum, cur) {
      return maxNum>=cur?maxNum:cur
    },0)
    console.log('最小值',min,'最大值',max)

在这里插入图片描述

二、对象遍历比较

在这里插入图片描述

  • for…in
  • Object.keys()
  • Object.values()
  • Object.entries()
  • Object.getOwnPropertyNames

声明一个对象,用于方法使用·

    var obj={
      name:'路飞',
      age:18,
      height:160
    }

所有对象上的原型声明一个原型对象fn方法

  Object.prototype.fn=function(){
      console.log('hello')
    }
for…in

for…in返回的是所有能够通过对象访问的、可枚举的属性,即包括实例中的实现,也包括存在在你原型中的属性

  <script>
    // 声明一个对象,方便以下方法使用
    var obj={
      name:'路飞',
      age:18,
      height:160
    }
    // 所有对象上的原型声明一个原型对象fn方法
    Object.prototype.fn=function(){
      console.log('hello')
    }
    // for...in返回的是所有能够通过对象访问的、可枚举的属性,即包括实例中的实现,也包括存在在你原型中的属性
    console.log('for..in遍历结果')
    for(var key in obj){
      console.log(key,obj[key])
    }
  </script>

在这里插入图片描述

Object.keys()

Object.keys()把对象自身可枚举的属性值,但是不包括原型对象中的属性,然后返回一个由属性名组成的数组

  <script>
    // 声明一个对象,方便以下方法使用
    var obj = {
      name: '路飞',
      age: 18,
      height: 160
    }
    // 所有对象上的原型声明一个原型对象fn方法
    Object.prototype.fn = function () {
      console.log('hello')
    }
    // Object.keys()把对象自身可枚举的属性值,但是不包括原型对象中的属性,然后返回一个由属性名组成的数组
    console.log('Object.keys()遍历结果')
    console.log(Object.keys(obj))
  </script>

在这里插入图片描述

Object.values()

Object.values()把对象自身可枚举的属性值,但是不包括原型对象中的属性,然后返回一个由属性值组成的数组

  <script>
    // 声明一个对象,方便以下方法使用
    var obj = {
      name: '路飞',
      age: 18,
      height: 160
    }
    // 所有对象上的原型声明一个原型对象fn方法
    Object.prototype.fn = function () {
      console.log('hello')
    }
    // Object.values()把对象自身可枚举的属性值,但是不包括原型对象中的属性,然后返回一个由属性值组成的数组
    console.log('Object.values()遍历结果')
    console.log(Object.values(obj))
  </script>

在这里插入图片描述

Object.entries()

Object.entries()把对象自身可枚举的属性值,但是不包括原型对象中的属性,然后返回一个二维数组,在二维数组当中,每个子数组由对象的属性名和属性值组成

  <script>
    // 声明一个对象,方便以下方法使用
    var obj = {
      name: '路飞',
      age: 18,
      height: 160
    }
    // 所有对象上的原型声明一个原型对象fn方法
    Object.prototype.fn = function () {
      console.log('hello')
    }

    // Object.entries()把对象自身可枚举的属性值,但是不包括原型对象中的属性,然后返回一个二维数组,在二维数组当中,每个子数组由对象的属性名和属性值组成
    console.log('Object.entries()遍历结果')
    console.log(Object.entries(obj))
  </script>

在这里插入图片描述

Object.getOwnPropertyNames

Object.getOwnPropertyNames()把对象自身可枚举的属性值,但是不包括原型对象中的属性,然后返回一个由属性名组成的数组

  <script>
    // 声明一个对象,方便以下方法使用
    var obj = {
      name: '路飞',
      age: 18,
      height: 160
    }
    // 所有对象上的原型声明一个原型对象fn方法
    Object.prototype.fn = function () {
      console.log('hello')
    }
    // Object.getOwnPropertyNames()把对象自身可枚举的属性值,但是不包括原型对象中的属性,然后返回一个由属性名组成的数组
    console.log('Object.getOwnPropertyNames()遍历结果')
    console.log(Object.getOwnPropertyNames(obj))
  </script>

在这里插入图片描述

总结

对比了多种常用遍历的方法的差异,在了解这些之后,在使用的时候需要好好思考以下,就能知道那个方法是最合适的。

如果这篇【文章】有帮助到你💖,希望可以给我点个赞👍,创作不易,如果有对前端端或者对python感兴趣的朋友,请多多关注💖💖💖,咱们一起探讨和努力!!!
👨‍🔧 个人主页 : 前端初见

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JavaScript中的数组对象是两种不同的数据类型,它们在具体的数据存储和使用方式上都有着明显的差异。因此,在遍历这两种类型的数据时,对应的方法也是不同的。下面简单介绍一下它们的区别。 数组是一种有序的数据集合,其中每个元素都有一个数字索引,从0开始计数。JavaScript提供了多种遍历数组方法,包括for循环、forEach、map等。其中最常用的是for循环,具体使用方式如下: ``` let arr = ['a', 'b', 'c', 'd']; for(let i = 0; i < arr.length; i++){ console.log(arr[i]); } ``` 这段代码就是最基本的遍历数组方法,通过循环每一个索引,来获取对应的元素,然后进行操作。 而对象则是一种无序的键值对集合,其中每个键值对就是一个属性和一个对应的值。使用对象时,最常用遍历方法是for...in循环,具体使用方式如下: ``` let obj = {a: 1, b: 2, c: 3}; for(let key in obj){ console.log(key + ': ' + obj[key]); } ``` 这段代码就是遍历对象的最基本方式,通过循环对象的每一个属性,来获取对应的值,然后进行操作。 需要注意的是,在对象遍历中,我们一般使用for...in循环来遍历对象的属性,需要注意的是,在使用for...in循环时,枚举顺序是不确定的,因此需要特别注意循环内部的顺序问题。 综上,数组对象遍历方法有明显的区别。在使用时,需要分别根据数据类型采用对应的方法,才能够获得最好的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端初见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值