2015-04-12 23 views
2

我發現堆棧溢出的許多帖子關於該類似的主題,但他們都沒有解決這個問題。Javascript ::查找包含重複值的數組與數組的唯一數組之間的差異

<script> 

//Array GanginaA contains duplicated values. 
//Array GanginaB contains only unique values that have been fetched from GanginaA 

GanginaA=[0,1,2,3,4,5,5,6,7,8,9,9]; 
GanginaB=[0,1,2,3,4,5,6,7,8,9]; 

var hezi=<!--The Magic Goes Here--> 

console.log(hezi); 

/* 
* Expected Output: 
* 5,9 
*/ 

</script> 

GanginaA總是會更長或相同GanginaB所以沒有理由用較長的陣列長度的值來計算。

GanginaB將始終包含取自GanginaA的唯一值,因此它始終是較短的數組長度或與GanginaA數組相同。

現在,它使得它更容易找到雙打。

回答

2

您可以使用過濾器來獲取元素,如下面

GanginaA = [0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9]; 
GanginaB = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 
var hezi = GanginaB.filter(function (item, index) { 
    return GanginaA.indexOf(item) !== GanginaA.lastIndexOf(item) 
}); 
console.log(hezi.join(" , ")); // 5, 9 
+0

您是DE男人!我愛你兄弟!非常感謝! :)))))))))))))) – davidmarko

+0

不客氣:P – mohamedrias

1

JavaScript的對象具有的HashMap樣的行爲,這樣你就可以像一組使用它們的一種。如果遍歷所有值並將它們設置爲對象內的鍵,則可以使用Object.keys方法獲取唯一值的數組。

function uniqueValues() { 
    var unique = {}; 

    [].forEach.call(arguments, function(array) { 
    array.forEach(function(value) { 
     unique[value] = true; 
    }); 
    }); 

    return Object.keys(unique); 
}; 

該函數將返回作爲參數傳遞的任意數量數組中的唯一元素。

uniqueValues([1, 2, 3], [ 1, 1, 1], [2, 2, 2], [3, 3, 3]); // [ 1, 2 3 ] 

一個缺點這種方法是使用Javascript強制將所有鑰匙串,你可以通過改變return語句把它們放回號:

return Object.keys(unique).map(Number); 
2

我能想到的更容易:

var hezi=[]; 

for (var i=0;i<GanginaA.length;i++){ 
    hezi[GanginaA[i]] = GanginaA[i]; 
    hezi[GanginaB[i]] = GanginaB[i]; 
} 
hezi = hezi.filter (function(el){return el!=undefined;}); 

確實在O(n)的行動的一切,而不是爲O(n^2)