Merging of two arrays, store unique elements, and sorting in jQuery

流过昼夜 提交于 2020-05-12 15:37:55

问题


var Arr1 = [1,3,4,5,6];

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

I am trying to do merge these two arrays and output coming is [1,3,4,5,6,4,5,6]

I have used $.merge(Arr1, Arr2); this piece to merge them. Using alert I can see the merged array like above.

Now my question is how can I get the following output: [1,3,4,5,6,8,9,10]

i.e. the elements should be unique as well as sorted in the same manner I have mentioned.

Please help.


回答1:


You can use Array.prototype.sort() to do a real numeric sort and use Array.prototype.filter() to only return the unique elements.

You can wrap it into a helper similar to this:

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;
    });
};

Note that the custom sort function works with numeric elements only, so if you want to use it for strings or mix strings with numbers you have to update it off course to take those scenarios into account, though the rest should not change much.

Use it like this:

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

var arrAll = concatArraysUniqueWithSort(arr1, arr2);

arrAll will now be [1, 3, 4, 5, 6, 8, 9, 10]


DEMO - concatenate 2 arrays, sort and remove duplicates


There is many ways of doing this I'm sure. This was just the most concise I could think off.




回答2:


merge two or more arrays + remove duplicities + sort()

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



回答3:


This looks like a job for 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]



回答4:


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

Update: This is a bad idea, since the 'unique' function is not meant for use on numbers or strings. However, if you must then the sort function needs to be told to use a new comparator since by default it sorts lexicographically.




回答5:


Using underscore.js:

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

This example is taken directly from underscore.js, a popular JS library which complements jQuery




回答6:


I did that as follows, where t1 and t2 are my two tables.

The first command put the values of the table t2 to the t1. The second command removes the duplicate values from the table.

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


来源:https://stackoverflow.com/questions/22208966/merging-of-two-arrays-store-unique-elements-and-sorting-in-jquery

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!