Метод $.merge() предназначен для объединения
массивоподобных объектов или массивов в один массив. Он является важным
инструментом при работе с коллекциями элементов DOM, массивами данных и
объектами, которые имеют структуру, похожую на массив. Функция позволяет
создавать новые объединённые массивы, не разрушая исходные данные, или
модифицировать существующие.
$.merge(target, source)
target.Метод возвращает объединённый массив, который
является модифицированным target.
Модификация целевого массива Метод изменяет
исходный массив target, добавляя к нему все элементы из
source. Это отличается от методов, которые возвращают новый
массив, оставляя исходные данные неизменными.
Поддержка массивоподобных объектов Любой объект
с числовыми ключами и свойством length может быть
использован как массив. Это позволяет объединять, например, коллекции
DOM-элементов или NodeList.
Плоское объединение Метод не выполняет глубокое
копирование или рекурсивное объединение вложенных массивов. Все элементы
добавляются на один уровень, как есть в source.
Объединение двух массивов:
let arr1 = [1, 2, 3];
let arr2 = [4, 5, 6];
$.merge(arr1, arr2);
console.log(arr1); // [1, 2, 3, 4, 5, 6]
В этом примере arr1 модифицируется, а arr2
остаётся неизменным. Метод возвращает ссылку на arr1.
Объединение массивоподобных объектов:
let nodeList = document.querySelectorAll('div');
let additionalNodes = [document.createElement('div'), document.createElement('div')];
let merged = $.merge(nodeList, additionalNodes);
console.log(merged); // Array с элементами NodeList и дополнительными div
NodeList в данном случае ведёт себя как массивоподобный объект, что
позволяет использовать его с $.merge() напрямую.
Использование с пустым массивом для клонирования:
let arr = [10, 20, 30];
let cloned = $.merge([], arr);
console.log(cloned); // [10, 20, 30]
console.log(arr === cloned); // false
Такой подход позволяет создавать новый массив, не изменяя исходный.
Array.prototype.concat()| Особенность | $.merge() |
concat() |
|---|---|---|
| Модифицирует исходный массив | Да | Нет |
| Поддержка массивоподобных объектов | Да | Частично, нужно вручную преобразовывать в массив |
| Возвращает целевой массив | Да | Возвращает новый массив |
$.merge() полезен при динамическом формировании
массивов элементов из разных источников, например, комбинируя результаты
нескольких запросов DOM.$.merge([...target], source).Попытка объединить объекты без свойства
length
$.merge([1,2], {a:3, b:4}); // Некорректно, элементы не добавятсяОжидание глубокого слияния
$.merge([1, [2]], [[3]]); // Результат: [1, [2], [3]], не [1, 2, 3]Перепутанные аргументы Если source
передан первым, массив не объединяется корректно, так как метод изменяет
первый аргумент.
Bliss.js автоматически проверяет, что оба аргумента являются
массивами или массивоподобными объектами. Если проверка не пройдена,
метод возвращает target без изменений, что предотвращает
ошибки выполнения.
Метод $.merge() обеспечивает эффективное и удобное
объединение массивов и коллекций DOM с минимальным кодом. Он особенно
полезен в ситуациях, когда необходимо модифицировать существующий массив
и добавить элементы из другого источника, сохраняя при этом ссылку на
исходный объект.
В сочетании с другими методами Bliss.js, такими как
$.each() и $.map(), $.merge()
позволяет строить гибкие цепочки операций над массивоподобными
объектами, упрощая работу с динамическими данными в браузере.