簡體   English   中英

簡單計數javascript數組中的唯一項

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

https://jsbin.com/rolaxuh/1/edit?html,js,console

暫無
暫無

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

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