Объединение двух массивов, сохранение уникальных элементов и сортировка в jQuery

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

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

Я пытаюсь объединить эти два массива и выход пришествие [1,3,4,5,6,4,5,6]

я использовал $.merge(Arr1, Arr2); этот кусок, чтобы объединить их. Используя alert, я вижу объединенный массив, как показано выше.

теперь мой вопрос как я могу получить следующий результат: [1,3,4,5,6,8,9,10]

т. е. элементы должны быть уникальными, а также отсортированы таким же образом, как я упоминал.

пожалуйста, помогите.

6 ответов


можно использовать массив.прототип.sort () чтобы сделать реальную числовую сортировку и использовать массив.прототип.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]


демо - объединить 2 массива, сортировать и удалять дубликаты


есть много способов сделать это, я уверен. Это было самое лаконичное, что я смог придумать.


объединить два или более массива + удалить дубликаты + sort ()

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

Это похоже на работу для 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]

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

обновление: Это плохая идея, так как "уникальная" функция не предназначена для использования в числах или строках. Однако, если вы должны, то функции сортировки нужно сказать, чтобы использовать новый компаратор, так как по умолчанию он сортирует лексикографически.


С помощью подчеркивания.js:

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

этот пример взят непосредственно из подчеркивания.js, популярная библиотека JS, которая дополняет jQuery


Я сделал это следующим образом, где t1 и t2-мои две таблицы.

первая команда помещает значения таблицы t2 в t1. Вторая команда удаляет повторяющиеся значения из таблицы.

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