获取javascript数组中唯一元素计数的最快方法

时间:2014-02-09 16:30:10

标签: javascript

我需要找到数组中唯一元素的数量。

var myArray = [ 10, 10, 20, 20, 30, 30, 40, 40, 40, 40, 50, 50, 50, 50, 60 ];

我想要count = 6(数组中唯一元素的数量)

并且,有没有办法在不迭代数组的情况下执行此操作? (我认为这将是最快的方式?)。

答案:我使用了.filter方法,如下所示。我的实际数组元素要复杂得多。我最终遍历我的数组并创建了一个新数组。新数组中的每个元素都是旧元素的.substr。然后,下面的.filter方法效果很好。感谢大家!!

4 个答案:

答案 0 :(得分:6)

您需要保留一组已知值和辅助计数。您可以使用.reduce()

var count = myArray.reduce(function(values, v) {
  if (!values.set[v]) {
    values.set[v] = 1;
    values.count++;
  }
  return values;
}, { set: {}, count: 0 }).count;

从一组空值和一个零开始,这将查看每个元素以查看它是否已添加到集合中。如果没有,则添加,计数递增。

答案 1 :(得分:4)

filter和长度如何:

var len = myArray.filter(function(val, i, arr) { 
    return arr.indexOf(val) === i;
}).length;

答案 2 :(得分:1)

如果您恰巧使用lodash:

final_values[x][0]  = consol_values[y][0];

答案 3 :(得分:0)

ES6提供了单行解决方案:

Array.from(new Set(myArray)).length