js 数组求和,多种方法,并比较性能
可以借用下面12种方法对数组求和,创建一个长度为10w的数组,进行测试
- every() 检测数值元素的每个元素是否都符合条件。
- filter() 检测数值元素,并返回符合条件所有元素的数组。
- map() 通过指定函数处理数组的每个元素,并返回处理后的数组。
- some() 用于检测数组中的元素是否满足指定条件(函数提供)。
- reduce() 数组中的每个值(从左到右)开始合并,最终为一个值
- reduceRight() 数组中的每个值(从右到左)开始合并,最终为一个值
- eval() 计算 JavaScript 字符串,并把它作为脚本代码来执行。
- for 循环代码块一定的次数
- while 当指定的条件为 true 时循环指定的代码块
- do/while 同样当指定的条件为 true 时循环指定的代码块
- for in 循环遍历对象的属性
- forEach 调用数组中的每个元素。
具体实现:
首先创建一个庞大的数组:
var aArr = [];
for(var i = 0;i < 1000000;i++){
aArr.push(i);
}
(function(){
//every
var _sum = 0;
console.time('every求和时间');
aArr.every(function(item,index){
_sum += item;
return true;//every每个值都运行
})
console.log('every求和: '+_sum);
console.timeEnd('every求和时间');
//filter
var _sum = 0;
console.time('filter求和时间');
aArr.filter(function(item,index){
_sum += item;
})
console.log('filter求和: '+_sum);
console.timeEnd('filter求和时间');
//map
var _sum = 0;
console.time('map求和时间');
aArr.map(function(item,index){
_sum += item;
})
console.log('map求和: '+_sum);
console.timeEnd('map求和时间');
//some
var _sum = 0;
console.time('some求和时间');
aArr.some(function(item,index){
_sum += item;
})
console.log('some求和: '+_sum);
console.timeEnd('some求和时间');
//reduce
console.time('reduce求和时间');
var prev;
aArr.reduce(function(prev,item,index){
prev += item;
})
console.log('reduce求和: '+_sum);
console.timeEnd('reduce求和时间');
//reduceRight
console.time('reduceRight求和时间');
var next;
aArr.reduceRight(function(next,item,index){
prev += item;
})
console.log('reduceRight求和: '+_sum);
console.timeEnd('reduceRight求和时间');
//eval
console.time('eval求和时间');
var _sum = eval(aArr.join('+'));
console.log('eval求和: '+_sum);
console.timeEnd('eval求和时间');
//for
console.time('for(var i = 0,len = aArr.length;i < len;i++)求和时间');
var _sum = 0;
for(var i = 0,len = aArr.length;i < len;i++){
_sum += i;
}
console.log('for求和: '+_sum);
console.timeEnd('for(var i = 0,len = aArr.length;i < len;i++)求和时间');
console.time('for(var i = 0;i < aArr.length;i++)求和时间');
var _sum = 0;
for(var i = 0;i < aArr.length;i++){
_sum += i;
}
console.log('for求和: '+_sum);
console.timeEnd('for(var i = 0;i < aArr.length;i++)求和时间');
//while
console.time('while求和时间');
var _sum = 0,i = 0,_len = aArr.length;
while(i < _len){
_sum += aArr[i];
i++;
}
console.log('while求和: '+_sum);
console.timeEnd('while求和时间');
//do while
console.time('do while求和时间');
var _sum = 0,i = 0,_len = aArr.length;
do{
_sum += aArr[i];
i++;
}while(i < _len)
console.log('do while求和: '+_sum);
console.timeEnd('do while求和时间');
//forEach
var _sum = 0;
console.time('forEach求和时间');
aArr.forEach(function(item,index){
_sum += item;
return true;//every每个值都运行
})
console.log('forEach求和: '+_sum);
console.timeEnd('forEach求和时间');
})()
every求和: 4999950000
every求和时间: 5.648193359375ms
filter求和: 4999950000
filter求和时间: 3.9560546875ms
map求和: 4999950000
map求和时间: 17.988037109375ms
some求和: 4999950000
some求和时间: 6.005126953125ms
reduce求和: 4999950000
reduce求和时间: 5.129150390625ms
reduceRight求和: 4999950000
reduceRight求和时间: 4.081787109375ms
eval求和: 4999950000
eval求和时间: 43.47314453125ms
for求和: 4999950000
for(var i = 0,len = aArr.length;i < len;i++)求和时间: 2.748046875ms
for求和: 4999950000
for(var i = 0;i < aArr.length;i++)求和时间: 5.08984375ms
while求和: 4999950000
while求和时间: 4.9140625ms
do while求和: 4999950000
do while求和时间: 4.52392578125ms
forEach求和: 4999950000
forEach求和时间: 4.5830078125ms
效率最快的也就是我们用的较多的for循环(红字),但是如果不注意for的优化写法,就会导致for性能的极大降低
js 数组求和,多种方法,并比较性能的更多相关文章
- Javascript数组求和的方法总结 以及由斐波那契数列得到的启发
一次面试中,面试官要求用三种不同的Javascript方法进行一个数字数组的求和,当时思来想去只想到了使用循环这一种笨方法,因此面试比较失败,在这里总结了六种Javascript进行数组求和的方法,以 ...
- js数组求和
array1.reduce(callbackfn[, initialValue]) callback : 函数执行在数组中每个值 initialValue : 对象作为第一个参数回调的第一次调用使用 ...
- js数组去重的方法(转)
JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...
- js数组高阶方法reduce经典用法代码分享
以下是个人在工作中收藏总结的一些关于javascript数组方法reduce的相关代码片段,后续遇到其他使用这个函数的场景,将会陆续添加,这里作为备忘. javascript数组那么多方法,为什么我要 ...
- JS —— 数组与字符串方法
数组 1. 基本方法 1)Array.prototype.unshift(item1,item2,item3...) 描述: 在数组的前面添加元素,一次可以传入多个参数. 注意:元素会根据当前传入的 ...
- JS 数组常用的方法
数组常用的方法: x.toString()方法:任何对象都有toString方法. 将任何对象转为字符串. 一般不主动调用,系统在需要时自动调用 x.valueOf()方法:同toStr ...
- js数组的forEach方法能不能修改数组的值
如果要使用数组的forEach()方法对其改值时,需要直接通过arr[i]这种方式来更改. 请看下面代码: // 数组改值 let arr = [1,3,5,7,9]; arr.forEach(fun ...
- Js 数组的各种方法及操作
一.数组去重 var arr = [0,1,20,3,0,45,6,0]; Array.prototype.unrepeat = function(){ var array = []; for(var ...
- js将伪数组转换为标准数组的多种方法
在js中,数组是特殊的对象,凡是对象有的性质,数组都有,数组表示有序数据的集合,而对象表示无序数据的集合. 那伪数组是什么呢,当然它也是对象,伪数组一般具有以下特点: 按索引方式存储数据: 具有len ...
随机推荐
- 【Python】学习笔记十一:文件I/O
文件I/O是Python中最重要的技术之一,在Python中对文件进行I/O操作是非常简单的. 1.打开文件 语法: open(name[, mode[, buffering]]) 1.1文件模式 1 ...
- springmvc管理资源开放
关于web.xml的url映射的小知识:<url-pattern>/</url-pattern> 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀 ...
- Lintcode---二叉树的最大深度
给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的距离. 您在真实的面试中是否遇到过这个题? Yes 样例 给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的 ...
- django学习笔记【002】创建第一个django app
2.3.3 1.创建一个名叫polls的app python3. manage.py startapp polls tree mysite/ mysite/ ├── db.sqlite3 ├── ma ...
- unity, access standard shared emission by script
unity 5.1.1f1 personal 用下面方法在脚本中设置standard shader的emssion: gameObject.GetComponent<MeshRenderer&g ...
- linode下更换内核(debian,ubuntu,centos)
1.首先到这个网址下载你需要得内核文件,以genric:http://kernel.ubuntu.com/~kernel-ppa/mainline/ 如果系统是 64 位,则下载 amd64 的 li ...
- Atitti. 语法树AST、后缀表达式、DAG、三地址代码
Atitti. 语法树AST.后缀表达式.DAG.三地址代码 抽象语法树的观点认为任何复杂的语句嵌套情况都可以借助于树的形式加以描述.确实,不得不承认应用抽象语法树可以使语句翻译变得相对容易,它很好地 ...
- [转]手工释放linux内存——/proc/sys/vm/drop_caches
另一篇:http://www.linuxfly.org/post/320/ 1.清理前内存使用情况 free -m 2.开始清理 echo 1 > /proc/sys/vm/drop_ca ...
- 李洪强和你一起学习前端之(3)Css基础和选择器
大家好! 经过了前面的学习,是不是对前端的学习有了初步的了解.虽然我之前有iOS开发的经验,现在接触一门新的语言,对我来说 有一定的优势,但是一门技术对于谁来说都是公平的,我承认,我在接触新知识的时候 ...
- iOS开发25个性能调优技巧
1. 用ARC管理内存 ARC(Automatic Reference Counting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为 ...