美文网首页
JS遍历方法性能比较

JS遍历方法性能比较

作者: 伪球迷也是球迷啊 | 来源:发表于2020-05-18 12:52 被阅读0次

考虑游览器版本,内核优化,数据会有偏差;各个循环适用条件场景,优缺点,性能消耗

创建一个10w条数据的数组,遍历该数组,取出所有value,比较性能

const arr = [];
const values = [];
const length = 1000000;
for (let i = 0; i < length; i++) {
    arr.push({
        id: i + 1,
        value: `text${i+1}`
    });
}

for循环 js中最原始的遍历方法

// 使用let定义i为块级作用域,break,continue,return;
console.time('for');
for (let i = 0; i < arr.length; i++) {
    values.push(arr[i].value);
}
console.timeEnd('for');

==38.739ms==


// for循环优化版本,length用变量定义,不需要每次查找数组长度
console.time('forBest');
for (var i = 0, len = arr.length; i < len; i++) {
    values.push(arr[i].value);
}
console.timeEnd('forBest');

==28.186ms==

while

// while循环,一般用不不确定循环次数,对比for循环,for中局部变量在循环结束后会被释放回收;while需要在循环之前定义好变量;性能接近;
console.time('while');
var i = 0;
while (i < arr.length) {
    values.push(arr[i].value);
    i++;
}
console.timeEnd('while');

==29.187ms==

map

// map循环 ,返回新数组,不改变原数组值
console.time('map');
let a = arr.map(item => {
    return item.value;
});
console.timeEnd('map');

==48.471ms==

forEach

// forEach循环,不改变原数组 ,不能使用break语句中断循环,也不能使用return语句返回到外层函数,可以try catch
console.time('forEach');
arr.forEach((item, key) => {
    values.push(item.value);
});
console.timeEnd('forEach');

==54.872ms==

++综合以上数据第一梯队:while,for优化,for;第二梯队: map,forEach++

filter

// 不改变原数组,返回的是符合项组成新数组,不会跳出循环
console.time('filter');
arr.filter((item, key) => {
    return item.id > 0;
});
console.timeEnd('filter');

==91.107ms==

reduce

// 求和,求最大值,转换数组
// array.reduce(function(accumulator, currentValue, currentIndex, array), initialValue);
// currentIndex 有初始值从0开始,没有从1开始
console.time('reduce');
const a = arr.reduce((preValue, current) => {
    preValue.push(current.value);
    return preValue;
}, []);
console.timeEnd('reduce');

==74.425ms==

for of

// 遍历具有iteratoer接口属性的数据,比如Array,map,set,不能用于object,可以用break、continue和return 配合使用,获取到的是值

some

// 对数组中每一项遍历,只要有一项返回true,则返回true, 返回值为布尔值
console.time('some');
arr.some((item, key) => {
    return item.id > 1;
});
console.timeEnd('some');

every

// 对数组中每一项遍历,每一项返回true,则返回true, 返回值为布尔值
console.time('every');
arr.every((item, key) => {
    return item.id > 1;
});
console.timeEnd('every');

数组查询方法 find indexOf includes

find() 方法返回数组中满足提供的测试函数的第一个元素的值;
indexOf()方法返回在数组中可以找到给定元素的第一个索引,如果不存在,则返回-1;
includes() 方法用来判断当前数组是否包含某指定的值,返回值boolean

对象遍历

for in

// 遍历的是索引(键名),既可遍历对象,也可遍历数组。遍历数组时也会遍历可枚举的其他方法,所以不推荐 for..in遍历数组, 遍历数组,break、continue和return;
可以用obj.hasOwnPropery()判断是实例属性

values,keys, entries, Reflect.ownKeys()

// keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历
// Object.keys返回所有不可枚举属性的key,Reflect.ownKeys返回所有属性,包括symbol属性

相关文章

  • JS遍历方法性能比较

    考虑游览器版本,内核优化,数据会有偏差;各个循环适用条件场景,优缺点,性能消耗 创建一个10w条数据的数组,遍历该...

  • 【】for、forEach、map数组遍历性能比较

    【js】for、forEach、map数组遍历性能比较 结果:遍历时间上for循环遍历

  • js遍历方法比较

    一。最原始的for循环 二。forEach 上面写法较为麻烦,所以数组提供了forEach方法。 该方法存在一个问...

  • 数组的遍历一:遍历次数的对比

    数组遍历 前言 数组的遍历方法有很多, 哪一种比较好呢?不同的遍历方法之间性能有差异吗?哪些方法可以提前退出遍历呢...

  • 遍历数组和对象2018-08-14

    js数组遍历和对象遍历 针对js各种遍历作一个总结分析,从类型用处:分数组遍历和对象遍历;还有性能,优缺点等。 J...

  • 数组2

    js数组遍历和对象遍历 针对js各种遍历作一个总结分析,从类型用处:分数组遍历和对象遍历;还有性能,优缺点等。 J...

  • js遍历对象for...in...方法

    js遍历对象的方法有很多,目前个人用得比较多的是for...in...方法。const obj= {name:'小...

  • JS 数组循环遍历方法的对比

    JS 数组循环遍历方法的对比 JavaScript 发展至今已经发展出多种数组的循环遍历的方法,不同的遍历方法运行...

  • JS Related

    JS几种数组遍历方式以及性能分析对比 javascript中in和hasOwnProperty区别

  • selenium 如何抓取请求信息

    页面性能监控 很多公司都会做页面性能的检测,做的方法也非常多。其实比较简单的是利用js去做,js可以很方便的调取浏...

网友评论

      本文标题:JS遍历方法性能比较

      本文链接:https://www.haomeiwen.com/subject/kcisohtx.html