[英]Simple count of unique items in javascript array
在一個簡單的javascript數組中查找大量的唯一文件名。
我有一個JavaScript數組,通過合並兩個數組
var total_dl = prev_dl.concat(new_dl).sort();
一個是來自php變量的json_encode(),另一個是通過在表單上選擇的復選框值制成的。 這將輸出一個簡單的文件名列表,即
cat.jpg, dog.jpg, elephant.jpg, cat.jpg, lion.jpg, dog.jpg
然后,我可以將其細化為不同值的數組,
var unique_dl = total_dl.filter((value,pos) => {return total_dl.indexOf(value) == pos;} );
輸出
cat.jpg, dog.jpg, elephant.jpg, lion.jpg
我現在只需要輸出一個計數,即這里包含多少個唯一/不同的文件名,即4。首先想到的是使用長度
var count_unique = unique_dl.length;
似乎給定prev_dl + 1的值,對於由new_dl組成的任何內容都保持不變。 另一個嘗試
var count_unique = unique_dl.filter(function(val, i, arr) {
return arr.indexOf(val) === i;
}).length;
也會失敗(我在這里格式化錯誤嗎?)。
非常感謝您在這里提出任何建議/指導。
您可以使用Set對象。 它需要迭代,並返回包含唯一項的集合。
const arr = 'cat.jpg, dog.jpg, elephant.jpg, cat.jpg, lion.jpg, dog.jpg'.split(', ');
const unique = new Set(arr);
console.log(unique.size);
如果要將其轉換回數組,則可以使用Array.from :
const uniqueArr = Array.from(unique);
console.log(uniqueArr);
const arr = 'cat.jpg, dog.jpg, elephant.jpg, cat.jpg, lion.jpg, dog.jpg'.split(', '); const unique = new Set(arr); console.log('Set size', unique.size); const uniqueArr = Array.from(unique); console.log('Unique array', uniqueArr);
unique_dl.length解決方案對我有用。 構建unique_dl您需要O(n ^ 2)時間,因此它比以下方法慢:
function count_unique(in_array) {
if(in_array.length == 0)
return 0;
var sorted = input_array.sort();
var unique_count = 1;
for(int i = 1; i < sorted.length; ++i)
if(sorted[i - 1] != sorted[i])
++unique_count;
return unique_count;
}
由於它僅使用O(n log(n))時間
我已經測試了您的示例,正如@phil所說,您提供的數據為4。
var total_dl = [
'cat.jpg', 'dog.jpg', 'elephant.jpg', 'cat.jpg',
'lion.jpg', 'dog.jpg'
]
var unique_dl = total_dl.filter((value,pos) => {return total_dl.indexOf(value) == pos;} );
console.log(unique_dl)
var count_unique = unique_dl.length;
console.log(count_unique)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.