快速分组javascript数组

Joe*_*Joe 11 javascript arrays

我有几千个字符串的数组

['7/21/2011', '7/21/2011', '7/21/2011', '7/20/2011', etc]
Run Code Online (Sandbox Code Playgroud)

我目前正在运行此代码以按字符串分组并获取最大组值:

var max = 0;
var group = {};
arr.map(function (value) {
  if (group[value]) {
    group[value]++;
  } else {
    group[value] = 1;
  }
  max = Math.max(max, group[value]);
});
Run Code Online (Sandbox Code Playgroud)

是否有任何改进使这段代码运行得更快?

编辑: 结果在:http://jsperf.com/javascript-array-grouping2

编辑编辑:该测试存在缺陷.迈克塞缪尔的代码是最快的.

6000个条目测试 - > http://jsperf.com/javascript-array-grouping2

10K条目测试 - > http://jsperf.com/javascript-array-grouping

Mik*_*uel 9

如果你确定这是一个热点并且速度非常重要,我会尝试通过内联max和内联来减少数千个函数调用map.

您还可以通过删除比较来更快地使您的函数体.

var max = 0;
var group = {};
for (var i = arr.length; --i >= 0;) {
  var value = arr[i];
  var n = group[value] = 1 - -(group[value] | 0);
  if (n > max) { max = n; }
}
Run Code Online (Sandbox Code Playgroud)

最好的办法是衡量您关心的浏览器.

  • 只是我很傻.`1 - - x`是明确的数字运算,而`1 + x`可以是字符串连接,如果x不是nullish,boolean或numeric.在这种情况下,这是一个不必要的区别,因为`(x | 0)`保证是数字,因此不存在字符串连接发生的可能性. (5认同)