我想知道使用javascript将数组元素相乘的最快最有效的方法。
var array = ["1", "2", "3", "4"];
所以结果总共为10。
答案 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];
}