使用Javascript将数组元素相乘

时间:2015-09-29 21:25:27

标签: javascript

我想知道使用javascript将数组元素相乘的最快最有效的方法。

var array = ["1", "2", "3", "4"];

所以结果总共为10。

5 个答案:

答案 0 :(得分:4)

首先,这些值是字符串,而不是数字,所以首先要做的是使它们成为数字:

 array.map(Number)

然后乘以.reduce

 array.map(Number).reduce(function(product, value) { return product * value; });

编辑 - 明确注释,*运算符会尝试将其操作数转换为数字。通过显式转换为数字,您可以添加一个过滤器,以查看是否生成了NaN个值,但NaN像癌症一样传播,所以它真的不重要。考虑数字转换可选。

现在,在 general 中,如果我从API获取数字 - 字符串数组,我倾向于进行显式转换,因为从某种意义上说,这意味着API的设计真的出了问题。我更愿意隔离任何有趣的"代码来自奇怪的东西。

答案 1 :(得分:1)

最有效/最高效的方法是始终使用常规循环:

var array = ['1', '2', '3', '4'], i = array.length, result = 1;
while (i > 0)
  result *= array[--i];

但由于这种表现在现实世界中无关紧要,我建议您使用reduce



var array = ['1', '2', '3', '4'];

var result = array.reduce(function(a, b) {
  return a * b;
});

console.log(result);




答案 2 :(得分:1)

最快的循环形式是标准for,请参阅 map vs for-loop performance test

注意: map()功能越慢,就像您在测试中看到的那样。

var Array = ["1", "2", "3", "4"];
var total=1;

for (var i = 0; i < Array.length; ++i) {
    total *= Array[i];
}

alert(total);

希望这有帮助。

答案 3 :(得分:1)

快速高效,使用旧的for循环,请参阅http://jsperf.com/reduce-v-for-javascript

答案 4 :(得分:0)

您可以使用reduce

var sql = "exec spTestSp @ParamIn1, @ParamIn2, @ParamOut1 OUT, @ParamOut2 OUT";
var result = db.Database.ExecuteSqlCommand(sql, in1, in2, out1, out2);

var out1Value = (long) out1.Value;
var out2Value = (string) out2.Value;

使用ES6中的箭头功能,它甚至更简单。

var sum = array.reduce(function(pv, cv) { return pv + cv; }, 0);

或for for循环

sum = array.reduce((pv, cv) => pv+cv, 0);

并以疯狂的方式

var total = 0;
for (var i = 0, n = array.length; i < n; ++i){
 total += array[i];
}