Добавляем...


  Работа с данными массивов
   JavaScript обеспечивает огромное число методов для выполнения общих операций с массивами. В этом разделе предлагается обзор таких методов объекта Array с кратким обсуждением их особенностей.

Метод concat() | Метод join() | Метод reverse() | Метод slice() | Метод splice() | Метод toString() и toSource() | Метод sort()

Метод concat()

   Метод concat() возвращает массив, получающийся в результате присоединения аргументов метода к массиву, для которого был вызван указанный метод. Так, при вызове сценария

var myArray = ["красный", "зеленый", "синий"];
alert(myArray.concat("голубой", "желтый"));

в результате будет получен следующий массив:
красный, зеленый, синий, голубой, желтый

Но будьте внимательны: concat() не изменяет массив "на месте". Обратите внимание на результат работы сценария

var myArray = ["красный", "зеленый", "синий"];
myArray.concat("голубой", "желтый");
alert(myArray);

в результате будет получен следующий массив:
красный, зеленый, синий
   В отличие от обсуждавшихся ранее методов push () и shift(), здесь необходимо сохранить возвращаемое значение. Например:

var myArray = ["красный", "зеленый", "синий"];
myArray = myArray.concat("голубой", "желтый");

Если аргумент concat() сам является массивом, он "выравнивается" в элементах массива. Это выравнивание не рекурсивно, поэтому для аргумента-массива, содержащего элемент-массив, будет выровнен только внешний массив. Следующий пример иллюстрирует этот факт:

var myArray = ["красный", "зеленый", "синий"];
myArray.concat("розовый", ["фиолетовый", "черный"]);
// Возвращает ["красный","зеленый","синий","розовый",
"фиолетовый","черный"]

myArray.concat("белый", ["серый", ["оранжевый", "малиновый"]]);
// Возвращает ["красный","зеленый","синий","белый",
"серый",["оранжевый","малиновый"]]

var myArr = myArray.concat("белый", ["серый", ["оранжевый", "малиновый"]]);
alert(myArr[myArr.length-1]) ;
// Показывает оранжевый,малиновый

Метод join()

   Метод join (), доступный в JavaScript 1.1+ и JScript 2.0+, преобразует массив в строку и позволяет программисту указать, как в создаваемой строке будут разделяться элементы массива. Обычно при выводе массива результатом является список его элементов, разделенных запятыми. Можно использовать join() для форматирования выводимого списка с помощью любых разделителей:

var myArray = ["красный", "зеленый", "синий"];
var strlngVersion = myArray.join(" / ");
alert(stringVersion);

в результате будет получен следующий массив:
красный / зеленый / синий

   Здесь следует отметить один важный момент: метод jоin() не имеет такого побочного эффекта, как разрушение массива. Это, очевидно, произошло бы при изменении типа объекта, например, в следующем случае

var myArray = ["красный", "зеленый", "синий"];
myArray = myArray.join(" / ");

Метод join() является противоположностью метода split() объекта String.

Метод reverse()

JavaScript 1.1+ nJScript 2.0+ позволяют инвертировать порядок элементов массива. Метод reverse (), как и следует ожидать, инвертирует порядок элементов соответствующего массива:

var myArray = ["красный", "зеленый", "синий"];
myArray.reverse();
alert(myArray);

в результате будет получен следующий массив:
синий, зеленый, красный

Метод slice()

   Метод slice() объекта Array (поддерживается, начиная с JavaScript 1.2 и JScript 3.0) возвращает "кусок" (подмассив) соответствующего массива. Поскольку метод не действует на месте, оригинальный массив остается неповрежденным. Метод имеет два аргумента — индексы старт и финиш — и возвращает массив, содержащий элементы, начиная с индекса старт до индекса финиш (не включая последний). Если указан только один аргумент, метод возвращает массив элементов, начиная с указанного индекса до конца массива. Заметьте, что аргументы старт и финиш могут принимать отрицательные значения. В этом случае они интерпретируются, как отсчет с конца массива. Например, вызов slice(-2) возвращает массив, содержащий последние два элемента данного массива. Следующие примеры демонстрируют работу slice():

var myArray = [1, 2, 3, 4, 5];
myArray.slice(2); // возвращает [3, 4, 5]
myArray.slice(1, 3); // возвращает [2, 3]
myArray.slice(-3); // возвращает [3, 4, 5]
myArray.slice(-3, -1); // возвращает [3, 4]
myArray.slice(-4, 3); // возвращает [2, 3]
myArray.slice(3, 1); // возвращает []


Метод splice()

   Метод splice(), доступный в JavaScript 1.2+ и JScript 5.5+, можно использовать для добавления, замены и удаления элементов массива на месте. Метод возвращает все удаляемые элементы. Допускается переменное число аргументов, первый из которых является обязательным. Соответствующий синтаксис можно резюмировать так:

splice(cmapm, число, значения);

Первый аргумент старт является индексом, по отношению к которому выполняется действие. Второй аргумент число указывает число элементов, удаляемых начиная с индекса старт. Все остальные аргументы, представленные здесь как значения (они разделяются запятыми, если их больше одного), вставляются вместо удаляемых элементов.

var myArray « [1, 2, 3, 4, 5];
myArray.splice(3,2,"a","b");
// возвращает 4,5 [1,2,3,"a","b"]
myArray.splice(1,1,"это","вставим","здесь");
// возвращает 2 [1,"это","вставим","здесь",3,"a","b"]


Метод toString() и toSource()

Метод toString() возвращает строку, содержащую разделенные запятыми значения массива. Этот метод вызывается автоматически при печати массива. Он эквивалентен вызову join() без аргументов. Можно также возвратить локализованную строку, если использовать toLocaleString(), где разделитель может быть другим, в зависимости от локальных установок браузера, выполняющего сценарий. Однако в большинстве случаев этот метод возвратит то же значение, что и toString(). Создание строк, включающих квадратные скобки, возможно с помощью метода toSource(), поддерживаемого в JavaScript 1.3. Метод позволяет создать строковое представление массива, которое можно передать функции eval(), чтобы использовать его именно в качестве массива.

Метод sort()

   Метод sort() является одним из самых полезных методов объекта Array. Поддерживаемый начиная с JavaScript 1.1 и JScript 2.0 метод sort () работает во многом аналогично функции qsort() из стандартной библиотеки С. По умолчанию он со¬ртирует элементы массива на месте в соответствии с лексикографическим порядком. При этом сначала элементы массива преобразуются в строку, а затем происходит их сортировка. Иногда это может порождать неожиданные результаты. Рассмотрим, на¬пример, следующий фрагмент программного кода:

var myArray = [14,52,3,14,45,36];
myArray.sort();
alert(myArray);

Если выполнить этот сценарий JavaScript, то выяснится, что при такой сортировке 3 оказывается больше 14! Чтобы в этом убедиться, взгляните на результат:

в результате будет получен следующий массив:
14,14,3,36,45,52

Причина в том, что 14 меньше 3 с точки зрения порядка строк. К счастью, ука¬занная функция сортировки является исключительно гибкой, поэтому все можно исправить. Чтобы отсортировать элементы в другом порядке, можно передать методу sort() другую функцию сравнения, которая и определит нужный порядок. Эта функция должна иметь два аргумента и возвращать отрицательное значение, если с точки зрения требуемого порядка первый аргумент должен находиться перед вторым. (Считайте, что первый оказывается "меньше" второго.) Если с точки зрения требуемого порядка два элемента должны быть равны, функция должна возвращать нулевое значение. Если первый аргумент должен следовать после второго, функция должна возвращать положительное значение. (Считайте, что первый оказывается "больше" второго.) Например, для выполнения сортировки чисел можно использовать функцию, подобную следующей:

function myCompare(x, у)
{
if (х < у)
return -1;
else if (х = = = у)
return 0;
else
return 1;
}

Ее можно использовать с предыдущим примером:

var myArray = [14,52,3,14,45,36];
myArray.sort(myCompare);
alert(myArray);

Теперь мы получим вполне ожидаемый результат:

в результате будет получен следующий массив:
3,14,14,36,45,52

Рассмотрим следующий пример, в котором нечетные числа сортируются перед четными:

var myArray = [1,2,3,4,5,6];
myArray.sort(
function(x, y)
{
if(x % 2)
return -1;
if (x % 2 = = 0)
return 1;
});
alert(myArray);

в результате будет получен следующий результат:
3,5,1,6,2,4

   Можно сделать этот пример более осмысленным, если добавить программный код, обеспечивающий сортировку четных и нечетных значений, например, по возрастанию.
назад: Массивы как стеки и очереди далее: Многомерные массивы


добавить комментарий
(без перезагрузки и регистрации)


10 случайных разделов

Что ищем на сайте ?


Примеры кода на сайте







@ 2008-2011 Amber
При использовании материалов ссылка на сайт обязательна
Яндекс.Метрика