reduce实现数组求和

对于实现数组求和,我们常用的思路是通过for、while,对数组进行迭代,依次将他们的值加起来,下面列举常用的两种方法

第一种:

var arr = [1,2,3,4,5,6];
Array.prototype.sum = function (){
    var sumResult = 0;
    for (var i = 0; i < this.length; i++) {
      sumResult += parseInt(this[i]);
    }
    return sumResult;
}
arr.sum(); 

第二种:

var arr = [1,2,3,4,5,6];
Array.prototype.sum = function () {
    var sumResult = 0;
    var i = this.length;
    while (i--) {
        sumResult += parseInt(this[i]);
    }
    return sumResult;
}
arr.sum();

经时间对比验证,此两种方法耗时较多。

安利一种新方法,reduce方法。

对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。

语法: array1.reduce(callbackfn[, initialValue])

reduce()方法接收callbackfn函数,而这个函数包含四个参数:

  function callbackfn(preValue,curValue,index,array){}

  • preValue: 上一次调用回调返回的值,或者是提供的初始值(initialValue)
  • curValue: 数组中当前被处理的数组项
  • index: 当前数组项在数组中的索引值
  • array: 调用 reduce()方法的数组

回调函数第一次执行时,preValue 和 curValue 可以是一个值,如果 initialValue 在调用 reduce() 时被提供,那么第一个 preValue 等于 initialValue ,并且curValue 等于数组中的第一个值;如果initialValue 未被提供,那么preValue 等于数组中的第一个值,`curValue等于数组中的第二个值。eg:

var arr = [0,1,2,3,4];
arr.reduce(function (preValue,curValue,index,array) {
    return preValue + curValue;
}); 

上个例子中的回调函数会被执行4次,

下面就用reduce实现我们的数组求和:

var arr = [1,2,3,4,5,6];
Array.prototype.sum = function (){
    var sumResult = 0;
    return this.reduce(function (preValue, curValue) {
     return sumResult = preValue + curValue;
    });
    return sumResult;
}
console.log(arr.sum());

结论:三种方法,经对比,reduce用时最短,性能最佳。

参考文章:http://www.w3cplus.com/javascript/array-part-8.html

时间: 2024-12-28 21:55:34

reduce实现数组求和的相关文章

数组求和方法汇总

var arr = [1, 2, 3, 4, 5, 6];测试时我不想过度使用全局变量影响命名空间,所以没使用未声明变量.而是直接通过私有作用域设置静态私有变量,也可以用其他设计模式来限定变量作用域.因为数组对象的迭代方法也是一种遍历,所以也可以借助用来实现求和.一.利用数组对象的各迭代方法:1.array.every()查询是否有所有项都匹配的方法: 1 (function() { 2 var sum = 0; 3 4 function getSum(item, index, array) {

数组求和的多种方法,并比较性能

可以借用下面12种方法对数组求和,创建一个长度为10w的数组,进行测试 every()?????  检测数值元素的每个元素是否都符合条件. filter()??????检测数值元素,并返回符合条件所有元素的数组. map()?? ?? ? 通过指定函数处理数组的每个元素,并返回处理后的数组. some()?????  用于检测数组中的元素是否满足指定条件(函数提供). reduce()????   数组中的每个值(从左到右)开始合并,最终为一个值 reduceRight()??  数组中的每个值

随机数组求和

题目要求: 随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 设计思路:     创建一个长度为10的double型数组,调用Java.util.Random包定义Random对象,利用方法nextInt(100);在通过for循环.Random类进行随机数赋值得到1-100间的随机数.在将数组里的数相加.最后在用JOptionPane.showMesssageDialog进行消息框输出. 程序流程图: 源程序代码: package qaq

二维数组求和

输入一个二维的整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个二维子数组,每个子数组都有一个和.求所有子数组的和的最大值. 解题思路:由于原来做的这个时间有一点久远,我记得当时的思路就是将二维数组转化为一维数组,然后利用原来的一维数组求和的方式进行计算. 源代码 package shengcheng; import java.util.Scanner; import org.junit.Test; public class Erwei { @Test public void f

CUDA学习:第一CUDA代码:数组求和

今天有些收获了,成功运行了数组求和代码:就是将N个数相加求和 //环境:CUDA5.0,vs2010 #include "cuda_runtime.h"#include "device_launch_parameters.h" #include <stdio.h> cudaError_t addWithCuda(int *c, int *a); #define TOTALN 72120#define BLOCKS_PerGrid 32#define TH

【POJ 3321】 Apple Tree (dfs重标号设区间+树状数组求和)

[POJ 3321] Apple Tree (dfs重标号设区间+树状数组求和) Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 21966   Accepted: 6654 Description There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tree. K

递归实现数组求和

#include<stdio.h> int sum(int* a, int n) { return (0 == n)?0:(sum(a,n-1) + a[n-1]); } void sum1(int* a, int n,int& s) { if(0 == n) return; else { s = s + a[n-1]; sum1(a,n-1,s); } } ///用return方案的话,就是先可以递归最底层,然后再从最底层开始计算回来,从下层向上层传数据 ///如果使用形参的话,在递

数组求和与课后作业

数组求和: 设计思路: 1.创建一个int型数组,长度为10,用来存放随机数: 2.使用Random类,产生随机数: 3.使用for循环把随机数存入数组中并求出数组中所有元素的和 4.使用JTextArea和JOptionPane生成消息框,输出数组的求和结果 程序流程图: 源程序: package shuzuadd;//包名 import javax.swing.*;//把 javax包里面的swing包里面的 所有东西 引进来. public class ShuZuAdd {//类名 pub

如何递归实现数组求和

如何用递归实现数组求和 给定一个含有n个元素的整形数组a,求a中所有元素的和. 非递归算法: int sumr(int *a,int n) { int sum=0; for(int i=0;i<n;i++) sum+=a[i]; return sum; } 递归算法: int sum(int *a,int n) { return n==0?0:sum(a,n-1)+a[n-1]; } 递归实现的方法,如果数组元素个数为0,那么和为0,如果元素个数为n,那么先求出前n-1个元素的和,再加上a[n-