2014-03-05 55 views
7
排序
var Arr1 = [1,3,4,5,6]; 

var Arr2 = [4,5,6,8,9,10]; 

我試圖做合併這兩個陣列和輸出來,是[1,3,4,5,6,4,5,6]合併兩個陣列,存儲唯一的元素,並在jQuery的

我用$.merge(Arr1, Arr2);這塊合併它們。使用alert我可以看到上面的合併數組。現在

我的問題是我怎麼能得到以下的輸出: [1,3,4,5,6,8,9,10]

即元素應該是唯一的,以及在我剛纔提到的相同的方式進行排序。

請幫忙。

回答

9

您可以使用Array.prototype.sort()進行真正的數字排序,並使用Array.prototype.filter()來僅返回唯一元素。

你可以把它包裝成一個類似的幫手:

var concatArraysUniqueWithSort = function (thisArray, otherArray) { 
    var newArray = thisArray.concat(otherArray).sort(function (a, b) { 
     return a > b ? 1 : a < b ? -1 : 0; 
    }); 

    return newArray.filter(function (item, index) { 
     return newArray.indexOf(item) === index; 
    }); 
}; 

注意,自定義排序功能,只有數字元素的作品,所以如果你想使用它的字符串或混合使用數字的字符串你有將其更新爲課程以考慮這些情況,但其餘情況不應有太大變化。

使用這樣的:

var arr1 = [1, 3, 4, 5, 6]; 
var arr2 = [4, 5, 6, 8, 9, 10]; 

var arrAll = concatArraysUniqueWithSort(arr1, arr2); 

arrAll現在將[1, 3, 4, 5, 6, 8, 9, 10]


DEMO - 串聯2列,排序和刪除重複


有許多方法我確信這樣做。這只是我能想到的最簡潔。

0

這看起來像Array.prototype.indexOf

var arr3 = arr1.slice(),    // clone arr1 so no side-effects 
    i;        // var i so it 's not global 
for (i = 0; i < arr2.length; ++i)  // loop over arr2 
    if (arr1.indexOf(arr2[i]) === -1) // see if item from arr2 is in arr1 or not 
     arr3.push(arr2[i]);   // it's not, add it to arr3 
arr3.sort(function (a, b) {return a - b;}); 
arr3; // [1, 3, 4, 5, 6, 8, 9, 10] 
+0

你能解釋一下嗎?前2行我還沒有明白...等待 – Monibrata

+0

@Monibrata添加評論 –

+0

感謝您的解釋...但使用此代碼我有輸出像[1,3,4,4,5,5,6,6 ,8,9,10] – Monibrata

0

使用underscore.js工作:

_.union([1, 2, 3], [101, 2, 1, 10], [2, 1]).sort(function(a,b){return a-b}); 
=> [1, 2, 3, 10, 101] 

這個例子是直接取自underscore.js,一種流行的JS庫,補充jQuery的

+0

請編輯你的答案,並添加更多的信息。 – omid

+0

'[1,2,3,101,10]'似乎排序不正確,因爲OP也希望對最終結果進行排序。 – Nope

0
a = [1, 2, 3] 
b = [2, 3, 4] 
$.unique($.merge(a, b)).sort(function(a,b){return a-b}); -> [1, 2, 3, 4] 

更新: 這是一個壞主意,因爲'唯一'功能不適用於數字或字符串。 但是,如果您必須使用新的比較器,那麼需要通知排序函數,因爲默認情況下它按字典順序進行排序。

+0

使用它顯示[1,10,3,4,5,5,6,6,8,9],而我需要[1,3,4,5,6,8,9,10] – Monibrata

+0

哈哈,是結果按字典順序排序,我的不好。雖然它不是這樣做的sort()函數嗎? (排序功能是按字典順序執行的) – avoid3d

3

合併兩個或多個陣列+刪除duplicities +排序()

jQuery.unique([].concat.apply([],[[1,2,3,4],[1,2,3,4,5,6],[3,4,5,6,7,8]])).sort(); 
0

我做了如下,其中T1和T2是我的兩個表。

第一條命令將表t2的值賦給t1。第二個命令從表中刪除重複的值。

$.merge(t1, t2); 
$.unique(t1);