[英]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.