jQuery не только помогает стилизовать внешний вид сайта или блога с помощью красивых и динамичных плагинов, но и облегчает ряд действий, которые были бы рутинными для разработчика на обычном JavaScript. В частности, к таким действиям относится работа с массивами. Ниже мы рассмотрим часто встречающиеся действия с массивами, которые становятся простыми с помощью jQuery.
1. Объединение двух массивов - метод merge()
В копилке jQuery есть методmerge(), который помогает легко объединить два массива. Метод доступен, начиная с версии jQuery 1.0. К примеру, у нас есть объявление двух целочисленных массивовa1 иa2:
jQuery не только помогает стилизовать внешний вид сайта или блога с помощью красивых и динамичных плагинов, но и облегчает ряд действий, которые были бы рутинными для разработчика на обычном JavaScript. В частности, к таким действиям относится работа с массивами. Ниже мы рассмотрим часто встречающиеся действия с массивами, которые становятся простыми с помощью jQuery.
1. Объединение двух массивов - метод merge()
В копилке jQuery есть методmerge(), который помогает легко объединить два массива. Метод доступен, начиная с версии jQuery 1.0. К примеру, у нас есть объявление двух целочисленных массивовa1 иa2:
Предположим, мы хотим получить третий массив, который будет представлять собой объединение всех элементов изa1иa2. Методmerge()библиотеки jQuery как раз выполняет такое объединение. Он принимает два аргумента - первый и второй массив, объединяет их и помещает результат в первый аргумент. Смотрим код:
// merge() объединяет массивы a1 и a2 и
// помещает результат в a1. Старый массив a1 "теряется"
$.merge(a1, a2);
Как видим, методmerge() является "деструктивным", т.е., используя его, мы теряем наш начальный массивa1. К счастью, этого можно избежать, если перед вызовомmerge() сделать копию первого массива. Это можно осуществить, опять же, с помощьюmerge() следующим образом:
var a1 = [ 1, 2, 3 ];
var a2 = [ 11, 22, 33 ];
// используем merge() для "клонирования" массива a1.
// запоминаем старый массив в переменной old_a1
var old_a1 = $.merge([], a1);
// теперь можно спокойно объединить массивы
// копия a1 у нас уже есть в переменной old_a1
$.merge(a1, a2);
Здесь мы использовали пустой массив[ ]в качестве первого аргумента методаmerge(). В результате вызоваmerge() проиcходит объединение этого пустого массива иa1, а результат запишется в переменнуюold_a1.
2. Проверка типа аргумента на массив - метод isArray()
Если возникает необходимость проверить тип некоторой переменной и понять - массив это или что-то еще, то для этого jQuery предоставляет методisArray. Его использовать очень просто и удобно - метод принимает единственный аргумент - для проверки его типа и возвращаетtrue, если аргумент - массив JavaScript иfalse в любом другом случае:
МетодisArray доступен, начиная с версии библиотеки jQuery 1.3
3. Поиск элемента в массиве - метод inArray()
Сигнатура метода -inArray ( значение, массив [, начало] ). Если требуется найти элемент в массиве, то методinArray() из библиотеки jQuery - это то, что нам нужно. Принимает два аргумента. Первый - искомое значение, второй аргумент - массив, в котором производится поиск. МетодinArray()схож со стандартным методомindexOf(), предоставляемым JavaScript, тем, что возвращает значение-1, если элемент не найден. Если первый элемент в массиве совпадает со значением, то возвращается0. Примеры - ниже:
// массив для поиска
var a = [ 2, 4, 1, 3 ];
// будем искать единицу в массиве a
var i = 1;
// в pos получим позицию в массиве, в которой
// найдено значение 1, т.е. pos = 2
var pos = $.inArray ( i, a );
В связи с тем, что в JavaScript значение0 считается не тождественным, но равнымfalse, т.е. выполняются условия:0 == false, но0 !== false, то методinArray следует аккуратно использовать в условияхif(...). Если необходимо понять, присутствует ли элемент в массиве, то нужно проверить, что возвращенное методом значение больше-1. То есть:
// массив, в котором ищем:
var a = [ 1, 2, 3];
// не делайте такую проверку!
if ( ! $.inArray ( 4, a ) ) {
alert ( "4 не найдено!");
} else {
alert ( "4 найдено!");
}
// правильно сравнивать со значением -1 :
if ( $.inArray ( 4, a ) > -1 ) {
alert ( "4 найдено!");
} else {
alert ( "4 не найдено!");
}
В данном примере первыйifсоставлен неверно и является распространенной ошибкой. Мы хотим вроде бы проверить, что значение4 не найдено в массивеa. Однако, мы попадем в веткуelse, и нам выведется сообщение "4 найдено!". А все потому, чтоinArray возвращает-1, который в соответствии с JavaScript не равенfalse, т.е.-1 != false(в отличие от0 == false). Раз-1 не равенfalse, то он считаетсяtrue. А восклицательный знак вначале добавляет нам отрицание условия. Выходит следующее:if ( ! ( true ) ) - и попадаем в итоге в веткуelse, что неверно по логике нашего поиска. Второй пример - корректный. Мы проверяем возвращенное значение на> -1. То есть, условие будет успешно, даже если позиция найденного элемента - первая, т.е. равна0. В данном же случае - поскольку элемента4нет в массиве -$.inArrayвернет-1, и мы попадаем вelseи получим сообщение "4 не найдено!", что корректно.