Объединение двух массивов, сохранение уникальных элементов и сортировка в 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);