js遍历数组和对象的方法比较

数组遍历选用的顺序:基础for循环 > for of 、map、filter > forEach > for in
对象遍历选用的顺序:for in > 先获得key数组再基础循环
不过获得的方法有两种:Object.keys,Object.getOwnProperty

Object.keys获取所有key、包括父对象的,Object.getOwnProperty只获取自己的key

循环是一个“攻城狮”必备的能力,供我们选择的循环方法有很多,所以大部分的时候就是想到什么方法就用什么方法,今天总结一下js中常用的循环方法,还有这些方法的适用场景,以及他们的效率。
js中遍历的对象无非两种:数组,对象。后面的循环中统一使用一个长度是1×10八次方的数组,和一个长度是1×10八次方的对象分析比较他们的效率。

一、最普通的for循环

这种循环是可以通过return,break,continue中断的,比较灵活,而且效率较高

for(var i = 0;i < arr.length; i++){}

先是遍历了一下数组,数组长度9位数时间是117ms,

 for (var i = 0; i< arr.length; i++) {
      sum += i
 }

对象长度7位数,遍历对象时间498ms

  var objkeys = Object.keys(obj)
  var sum = 0
  for (var i = 0; i< objkeys.length; i++) {
       sum += obj[objkeys[i]]
  }

二、稍微优化一下普通的for循环

这种循环也是可以通过return,break,continue中断的,比较灵活,而且效率较高

循环之前先计算出长度,不用每次都去获取length
var len = arr.length
for (var i = 0; i< len; i++) {}

长度是9位数的数组用时115ms,长度是7位数的对象用时495ms,不过如果长度小的话表现不明显。

三、for in

这种循环特别慢,因为9位数长度的数组循环不出结果我改成8位,用时1s,算下来比普通的for慢了有100倍,数组循环尽量少使用吧。

for (var arri in arr) {
sum += Number(arri)
}

遍历长度为7位数的对象用时174ms,比普通的方法表现优异,我感觉好像是因为普通循环要先获取对象的key值数组导致的时间延迟。所以遍历对象的时候可以用的。

四、for of

听网上说这种方法优化了for in 提高了效率,而且可以在循环中中断看上去也简洁

for (var arri of arr) {
sum += arri
}

遍历9位数长度的数组用时1225ms,虽然比不上普通的for循环,但是比for in确实好了太多了
for of 不能遍历对象,遍历时报错:Uncaught TypeError: obj[Symbol.iterator] is not a function

五、forEach()

arr.forEach((item, index, arr) => { // item为arr的元素,index为下标,arr原数组
sum += item
});

很明显,这是一个方法,这是数组自身的方法,效率还行,数组用时2710ms,但是循环的时候不能通过return,break,continue中断。对象用不了这个方法。

六、 filter()

通过名字能大概知道这个函数是用来做过滤的,筛选出符合要求的数组元素

arr.filter(item => { // item为数组当前的元素
return item > 1; // [2, 3]
})

还是刚才的数组,全部筛选一遍要十几秒,用的时候慎重,同样的数组方法,对象不能用

七、map()

和filter一样会返回一个数组,一般用来深copy

arr.map(item => { // item为数组的元素
console.log(item); // 1, 2, 3
return item * 2; // 返回一个处理过的新数组[2, 4, 6]
})

上面的数组也是要用十几秒,如果是对数组中的每一个元素做处理的话用这个还是很优雅的,比如数组中的每一个元素求平方之类的。对象不能使用。
所以最后总结一下如果不考虑特殊使用的话
数组遍历选用的顺序:基础for循环 > for of 、map、filter > forEach > for in
对象遍历选用的顺序:for in > 先获得key数组再基础循环
不过获得的方法有两种:Object.keys,Object.getOwnProperty

Object.keys获取所有key、包括父对象的,Object.getOwnProperty只获取自己的key

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在JavaScript中,遍历数组可以通过使用for循环来实现。可以使用以下代码来遍历数组并生成对象: ```javascript var arr = [1, 2, 3, 4, 5]; var obj = {}; for (var i = 0; i < arr.length; i++) { obj[arr[i]] = i; } console.log(obj); ``` 上述代码首先创建了一个对象`obj`。然后,通过for循环遍历数组`arr`,将数组中的每个元素作为对象`obj`的键,对应的索引作为。最后,打印输出对象`obj`。 这样,你就可以使用JavaScript遍历数组生成对象了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [JS遍历数组对象的区别及递归遍历对象数组、属性的方法详解](https://download.csdn.net/download/weixin_38746018/13004197)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [JavaScript遍历数组对象的元素简单操作示例](https://download.csdn.net/download/weixin_38576811/13209524)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [使用Python的Requests、Selenium和BeautifulSoup结合的爬虫示例代码,用于爬取带有分页的动态网页](https://download.csdn.net/download/weixin_44609920/88225628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值