【问题标题】:Easily add an array of values in Javascript (eg. without loops)在 Javascript 中轻松添加一组值(例如,没有循环)
【发布时间】:2011-06-24 19:54:51
【问题描述】:

我想知道是否有人知道在 javascript 中添加值数组的好方法?

我想出了:

var myArray = [1,2,3,4,5];

var total = eval(myArray.join("+"));

这很好而且很短,但我猜从 num 到 string 然后 evaling 回到一个数字是获取总数的缓慢方法。

【问题讨论】:

标签: javascript arrays optimization


【解决方案1】:

更新 - 结合安迪的方法和原型方法...

Array.prototype.sum = function(){
    return this.reduce(function(a,b) {return a+b} );
}

现在所有数组都将具有sum 方法。例如var total = myArray.sum();

原始答案...

我会被诱惑的

var myArray = [1,2,3,4,5];
var sum     = 0;

for (var i=0, iMax=myArray.length; i < iMax; i++){
    sum += myArray[i];
};

alert(sum);

如果您经常使用它,请将其分解为一个函数。或者更简洁,制作原型......

Array.prototype.sum = function(){
    for(var i=0, sum=0, max=this.length; i < max; sum += this[i++]);
    return sum;  
}

var myArray = [1,2,3,4,5];

alert(myArray.sum());

感谢DZone Snippets

【讨论】:

  • 格式正确。如果代码看起来有问题,那么删除格式(尤其是空格)不是可接受的响应。
  • @delnan 对不起,你到底指的是什么?
  • @delnan - 你的意思是for 循环格式 - 如果是这样,我已经修复它:)
  • @El Ronnoco:(编辑:是的,尽管它仍然可以改进恕我直言;))循环。在几乎每一种合理的编码风格中,它都会在运算符周围包含两三个换行符和空格。
  • @delnan 我认为运营商周围的空间正在争论它:) 这两种风格都没有特别冒犯我的眼睛。
【解决方案2】:

最合适的方法是使用 [Array.prototype.reduce]( https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce) 函数,ECMAScript 第 5 版中对语言的补充:

var myArray = [1,2,3,4,5],
    total   =  myArray.reduce(function (curr, prev) { return curr + prev; });

alert(total);

当然,旧版浏览器不支持此功能,因此您可能需要在代码中包含 compatibility implementation

【讨论】:

  • 这会比我的答案中的protoype.sum 函数执行得更快吗?这不是批评,顺便说一句,我不知道 reduce 函数,它看起来非常有用,但我认为对于像求和这样简单的事情,sum 可能会运行得更快?
  • 谢谢,这就是我要找的东西,我用谷歌搜索过,但没想到要上 MDN。
  • @El Ronnoco:它可能会运行得稍微快一些,但除非阵列真的很大,否则甚至不会引起注意。 真正让我对这个解决方案感到困扰的是求和所需的冗长 lambda... 运算符部分很棒(sum = reduce (+) 任何人?)。
  • @El:我希望原生 reduce 运行得更快,但不是兼容性实现。
  • @delnan 当您说“它会运行得稍微快一点”时,您是指 reduce 还是自定义原型?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
相关资源
最近更新 更多