给定一个数组[1,2,3,4],如何求其元素的和?(在这种情况下,总数为10。)

我认为每个美元可能有用,但我不确定如何实现它。


当前回答

此外,对于简单数组,使用es6求和。

const sum = [1, 2, 3].reduce((partial_sum, a) => partial_sum + a,0);
 
console.log(sum); 

对于具有默认初始化值的对象数组

const totalAmount = obj => 
    Object.values(obj).reduce((acc, { order_qty, mrp_price }) => 
    acc + order_qty * mrp_price, 0);
    
    console.log(totalAmount); 

其他回答

一小段JavaScript代码就能完成这项工作:

var numbers = [1,2,3,4];
var totalAmount = 0;

for (var x = 0; x < numbers.length; x++) {

    totalAmount += numbers[x];
}

console.log(totalAmount); //10 (1+2+3+4)
var total = 0;
$.each(arr,function() {
    total += this;
});

你可以试试这个:

var arr = [100,114,250,1200];
var total = 0; 
for(var i in arr){
  total += parseInt(arr[i]);
}

console.log(total);

输出将为:1664

或者,如果值为Float,请尝试以下操作:

var arr = [100.00,114.50,250.75,1200.00];
    var total = 0; 
    for(var i in arr){
      total += parseFloat(arr[i]);
    }
    
    console.log(total.toFixed(2));

输出将为:1665.25

这里很酷的技巧,我对很多安全的传统答案进行了吹毛求疵,没有缓存数组的长度。

function arraySum(array){
  var total = 0,
      len = array.length;

  for (var i = 0; i < len; i++){
    total += array[i];
  }

  return total;
};

var my_array = [1,2,3,4];

// Returns 10
console.log( arraySum( my_array ) );

在不缓存数组长度的情况下,JS编译器需要在循环的每次迭代中遍历数组来计算长度,这在大多数情况下是不必要的开销。V8和许多现代浏览器都为我们优化了这一点,因此它不再那么受关注,但也有一些较旧的设备受益于这种简单的缓存。

如果长度可能会发生变化,如果您不知道为什么要缓存长度,缓存可能会导致一些意想不到的副作用,但对于唯一目的是获取数组并将值相加的可重用函数来说,这非常适合。

这里是这个arraySum函数的CodePen链接。http://codepen.io/brandonbrule/pen/ZGEJyV

这可能是一种过时的心态,一直困扰着我,但我不认为在这种情况下使用它有什么缺点。

带reduce()

[1, 2, 3, 4].reduce((a, b) => a + b, 0); // 10

使用forEach()

let sum = 0;
[1, 2, 3, 4].forEach(n => sum += n);
sum; // 10

带参数

function arrSum(arr) { 
  sum = 0;  
  arr.forEach(n => sum += n); 
  return sum; 
}

arrSum([1, 2, 3, 4]) // 10