数组求和方法比较

数组方法介绍:

这里写图片描述

every()       检测数值元素的每个元素是否都符合条件。
filter()      检测数值元素,并返回符合条件所有元素的数组。
map()        通过指定函数处理数组的每个元素,并返回处理后的数组。
some()       用于检测数组中的元素是否满足指定条件(函数提供)。
reduce()       数组中的每个值(从左到右)开始合并,最终为一个值
reduceRight()    数组中的每个值(从右到左)开始合并,最终为一个值
eval()         计算 JavaScript 字符串,并把它作为脚本代码来执行。
for            循环代码块一定的次数
while         当指定的条件为 true 时循环指定的代码块
do/while       同样当指定的条件为 true 时循环指定的代码块
for in         循环遍历对象的属性
forEach      调用数组中的每个元素。

具体方法及代码:

首先设定一个作为数据源的数组

var arr = [1, 2, 3, 4, 5, 6,7,8,9,10];
  • every()方法:
(function() {
    var sum = 0;
    function getSum(item, index, array) {
        sum += item;
        console.log(sum);
        return true;//由于every方法是会在遇到回调函数返回的第一个false时停止遍历所以需要始终返回true
    };
    arr.every(getSum);
    console.log("use every:sum = " + sum);
})();
  • some()方法:
(function() {
    var sum = 0;
    function getSum(item, index, array) {
        sum += item;
        console.log(sum);
    };
    arr.some(getSum);
    console.log("use some:sum = " + sum);
})();
  • array.filter()方法:
(function() {
    var sum = 0;
    function getSum(item, index, array) {
        sum += item;
        console.log(sum);
    };
    arr.filter(getSum);
    console.log("use filter:sum = " + sum);
})();
  • array.map()方法:
(function() {
    var sum = 0;

    function getSum(item, index, array) {
        sum += item;
        console.log(sum);
    };
    arr.map(getSum);
    console.log("use map:sum = " + sum);
})();
  • froEach()方法:
(function() {
    var sum = 0;

    function getSum(item, index, array) {
        sum += item;
        console.log(sum);
    };
    arr.forEach(getSum);
    console.log("use forEach:sum = " + sum);
})();
  • reduce()正向归并方法:
arr.reduce(function(prevResult, item, index, array) {
    return prevResult += item;
});
  • reduceRight()逆向归并方法:
arr.reduceRight(function(prevResult, item, index, array) {
    return prevResult += item;
});
  • for循环方法
(function() {
    for (var i = 0, sum = 0; i < arr.length; i++) {
        sum += arr[i];
        console.log(sum);
    }
    console.log("use for:sum = " + sum);
})();
  • while循环方法
(function(){
    var i = 0, sum = 0;
    while(i<arr.length){
        sum+=arr[i];
        console.log(sum);
        i++;
    }
    console.log("use while:sum = " + sum);
})();
  • for -in方法
(function() {
    var sum = 0;
    for (var index in arr) {
        sum += arr[index];
        console.log(sum);
    }
    console.log("use for-in:sum = " + sum);
})();
  • forEach()方法(改写)
var calc = {
    sum: 0
};
function getSum(item, index, array) {
    this.sum += item;
    console.log(this.sum);
}
arr.forEach(getSum,calc);
console.log('use forEach and change this:sum=' + calc.sum);
  • join()方法
eval(arr.join("+"));
/*这里先将所有数组项通过字符串"+"连为一个字符串"1+2+3+4+5+6",然后返回的这个字符串传给eval()方法,eval()方法接收了这段字符串后,就直接将这段字符串中的代码放在当前作用域下执行了。*/

效率比较:

console.time("getSum");
    for (var i = 0; i < 1000000; i++){
        sum = 0;
        getSum(arr);
    }
    console.timeEnd("getSum");//获得计算时间;

比较:浏览器–Google Chrome

forEach方法(1264.000ms)<every方法(1276.000ms)<filter方法(1416.000ms)<some方法(1448.000ms)<reduce方法(4061.000ms)<map方法(4695.000ms)<for方法(8733.000ms)<while方法(9541.000ms)

参考文章:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值