簡體   English   中英

獲取 javascript 數組中唯一元素計數的最快方法

[英]Fastest way to get count of unique elements in javascript array

我需要找到數組中唯一元素的數量。

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

我想要count = 6 (數組中唯一元素的數量)

而且,有沒有辦法在不遍歷數組的情況下做到這一點? (我認為這將是最快的方式?)。

回答:我使用了如下所示的.filter 方法。 我的實際數組元素要復雜得多。 我最終遍歷了我的數組並創建了一個新數組。 新數組中的每個元素都是舊元素的 a.substr。 然后,下面的 .filter 方法效果很好。 謝謝大家!!

您需要保留一組已知值和輔助計數。 您可以使用.reduce()

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

從一組空值和零計數開始,這會查看每個元素以查看它是否已添加到集合中。 如果沒有,則添加它,並增加計數。

ES6 提供了單行解決方案:

new Set(myArray).size

filter和長度怎么樣:

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

如果您碰巧使用 lodash:

_.uniq(myArray).length

您現在可以將數組轉換為唯一數組並比較長度。 通過將其更改為Set然后回到Array來做到這一點。 如果Set較小,則刪除重復項,並且您的原始數組不包含唯一值。

const isUnique = (myArray.length === [...new Set(myArray)].length);

測試:

const myArray=[1,2,2,3,4]; 
console.log(myArray.length === [...new Set(myArray)].length);
false

const myArray=[1,2,3,4]; 
console.log(myArray.length === [...new Set(myArray)].length);
true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM