簡體   English   中英

刪除陣列中的重復項

[英]Removing Duplicates in Arrays

我試圖傳遞一個從數組中刪除重復項的函數。 它也應該處理字符串,對象,整數。 到目前為止,我在代碼中展示的是它將處理字符串,但沒有其他處理。 如何使該函數通用以處理數字,句柄數組,對象和混合類型?

let unique = (a) => a.filter((el, i ,self) => self.indexOf(el) ===i);

在此函數中,我進行了unique()過濾,以創建一個新數組,該數組檢查元素和數組中的索引以檢查是否重復。 任何幫助,將不勝感激。

我認為您首先應該對數組進行排序(輸入到函數)。 對其排序可以使所有數組元素正確排序。 例如,如果您在數組[ 1, 3, 4, 'a', 'c', 'a'] ,則將其排序為[ 1 , 3 , 4, 'a', 'a' , 'c' ] ,下一步是過濾返回的數組。

const unique = a => {
    if ( ! Array.isArray(a) )
        throw new Error(`${a} is not an array`);
    let val = a.sort().filter( (value, idx, array) => 
                 array[++idx] != value
             )
    return val;
}

let array = [ 1 , 5, 3, 2, "d", "q", "b" , "d" ];

unique(array); // [1, 2, 3, 5, "b", "d", "q"]

let obj = { foo: "bar" };

let arraySize = array.length;
array[arraySize] = obj;
array[arraySize++] = "foo";
array[arraySize++] = "baz";
array[arraySize++] = obj;

unique(array); // [1, 2, 3, 5, {…}, "b", "baz", "d", "foo", "hi", "q"]

它也適用於所有類型,但是如果您傳入一個帶有數組或對象作為其元素之一的數組文字,則此代碼將失敗

 unique( [ "a", 1 , 3 , "a", 3 , 3, { foo: "baz" }, { foo: "baz" } ] ); // it will not remove the duplicate of { foo: "baz" } , because they both have a different memory address

並且您還應該注意,由於sort array方法的結果,此代碼不會以傳遞的順序返回數組

嘗試使用沒有泛型的集合。 您可以編寫一個函數為

Set returnUnique(Object array[]) {
Set set=new HashSet();
  for (Object obj:array) {
     set.add(obj);
}
return set;
}

暫無
暫無

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

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