2014-03-05 31 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);