Назад Вперёд |
Ядро JavaScript 1.5. Справочник. |
Позволяет работать с массивами.
JavaScript 1.3: добавлен метод | |
new Array(arrayLength)
new Array(element0, element1, ..., elementN)
[element0, element1, ..., elementN]
Если Вы специфицируете LANGUAGE="JavaScript1.2"
в тэге <SCRIPT> :
new Array(element0, element1, ..., elementN)
Если Вы не специфицируете LANGUAGE="JavaScript1.2"
в тэге <SCRIPT> :
new Array([arrayLength])
new Array([element0[, element1[, ..., elementN]]])
new Array([arrayLength])
new Array([element0[, element1[, ..., elementN]]])
Массив это упорядоченный набор значений, ассоциированных с одним именем переменной.
В этом примере создаётся объект Array
с литералом массива; массив coffees
содержит три элемента и имеет длину "три":
coffees = ["French Roast", "Columbian", "Kona"]
Вы можете создать плотный массив из двух или более элементов, начиная с индекса 0, если Вы определяете начальные значения для всех элементов. Плотным является массив, в котором каждый элемент имеет значение. Следующий код создаёт плотный массив из трёх элементов:
myArray = new Array("Hello", myVar, 3.14159)
Элемент
массива индексируется порядковым номером.
Например: предположим, Вы определяете такой массив:
myArray = new Array("Wind","Rain","Fire")
Затем Вы обращаетесь к первому элементу массива myArray[0]
,
а ко второму элементу - myArray[1]
.
Если Вы специфицируете единственный числовой параметр в конструкторе Array,
Вы специфицируете начальный размер массива.
Следующий код создаёт массив из 5 элементов:
Поведение конструктора Array
зависит от того, является ли единственный параметр числом.
length
(размер
массива), установленным в это целое. Массив первоначально не содержит элементов,
хотя и может иметь ненулевой размер.Следующий код создаёт массив размером 25, затем присваивает значения первым трём элементам:
musicTypes = new Array(25)
musicTypes[0] = "R&B"
musicTypes[1] = "Blues"
musicTypes[2] = "Jazz"
Размер массива увеличивается, если Вы присваиваете значение элементу с более высоким индексом, чем текущий размер массива. Следующий код создаёт массив размером 0, а затем присваивает значение элементу 99. Это изменяет размер массива на 100.
colors = new Array()
colors[99] = "midnightblue"
В результате совпадения регулярного выражения и строки может быть создан массив.
Этот массив имеет свойства и элементы, которые предоставляют информацию о
совпадении. Массив является return-значением RegExp.exec
,
String.match
и String.replace
.
Чтобы лучше пояснить эти свойства и элементы, просмотрите следующий код, а затем - таблицу:
<SCRIPT LANGUAGE="JavaScript1.2">
//Совпадает одно d с последующим одним или более b с последующим одним d
//Запоминаются совпавшие b с последующим d
//Регистр игнорируется
myRe=/d(b+)(d)/i;
myArray = myRe.exec("cdbBdbsbz");
Свойства и элементы, возвращённые из этого совпадения:
Если Вы специфицируете единственный параметр в конструкторе Array
,
поведение зависит от того, специфицировали ли Вы LANGUAGE="JavaScript1.2"
в тэге <SCRIPT>:
Если Вы специфицируете LANGUAGE="JavaScript1.2"
в тэге <SCRIPT>,
возвращается массив, состоящий из одного элемента. Например, new Array(5)
создаёт массив из одного элемента с первым элементом со значением 5. Конструктор
с единственным параметром работает так же, как конструктор с несколькими
параметрами. Вы не можете специфицировать свойство length
массива Array
,
используя конструктор с одним параметром.
Если Вы не специфицируете LANGUAGE="JavaScript1.2"
в тэге <SCRIPT>,
Вы специфицируете начальный размер массива, как в других версиях JavaScript.
Если Вы специфицируете единственный параметр в конструкторе Array
, Вы специфицируете
начальный размер массива. Следующий код создаёт массив из пяти элементов:
Вы обязаны индексировать массив порядковыми числительным; например, myArray[0]
.
Свойство |
Описание |
---|---|
constructor |
|
index |
Для массива, созданного из совпадения с регулярным выражением, индекс с базой 0 места совпадения в строке. |
input |
Для массива, созданного из совпадения с регулярным выражением, отражает оригинальную строку, относительно которой выполнялся поиск совпадений с регулярным выражением. |
length |
|
prototype |
Метод |
Описание |
---|---|
concat | |
join |
|
pop | Удаляет последний элемент массива и возвращает этот элемент. |
push |
Добавляет один или более элементов в конец массива и возвращает новый размер массива. |
reverse | Переворачивает элементы массива: первый элемент становится последним, а последний элемент - первым. |
shift |
Удаляет первый элемент массива и возвращает этот элемент. |
slice |
|
splice |
|
sort |
|
toSource |
Возвращает литерал массива, представляющий специфицированный массив;
Вы можете использовать это значение для создания нового массива. Переопределяет
метод |
toString |
Возвращает строку, представляющую массив и его элементы. Переопределяет метод
|
unshift |
Добавляет один или более элементов впереди массива и возвращает новый размер массива. |
valueOf |
Возвращает
примитивное значение массива. Переопределяет метод |
Кроме того, этот объект наследует методы watch
и unwatch
из Object
.
Создаётся массив msgArray
размером 0, затем присваивается значение элементам msgArray[0]
и msgArray[99]
, а
размер массива становится 100.
msgArray = new Array()
msgArray[0] = "Hello"
msgArray[99] = "world"
// Следующий оператор - true,
// поскольку определён элемент msgArray[99].
if (msgArray.length == 100)
myVar="Массив имеет размер 100."
Двухмерный массив. Создаётся двухмерный массив и результат присваивается переменной myVar
.
myVar="Тест многомерного массива; "
a = new Array(4)
for (i=0; i < 4; i++) {
a[i] = new Array(4)
for (j=0; j < 4; j++) {
a[i][j] = "["+i+","+j+"]"
}
}
for (i=0; i < 4; i++) {
str = "Ряд "+i+":"
for (j=0; j < 4; j++) {
str += a[i][j]
}
myVar += str +"; "
}
В этом примере выполняется присвоение следующей строки переменной myVar
(разрывы
строк даны для удобства чтения):
Тест многомерного массива;
Ряд
0:[0,0][0,1][0,2][0,3];
Ряд
1:[1,0][1,1][1,2][1,3];
Ряд
2:[2,0][2,1][2,2][2,3];
Ряд
3:[3,0][3,1][3,2][3,3];
Объединяет
два массива и возвращает новый массив.
concat(arrayName2, arrayName3, ..., arrayNameN)
arrayName2... |
concat
не изменяет оригиналы массивов, но возвращает копию "на один уровень глубже",
которая содержит копии элементов, скомбинированных из массивов-оригиналов.
Элементы оригинальных массивов копируются в новый массив так:
concat
копирует ссылки на объекты в новый массив. И оригинальный, и новый массивы
ссылаются на один объект. Если объект, на который ссылаются, изменяется,
изменения видны и новом, и в оригинальном массивах.String
и Number
): concat
копирует строки и числа в новый массив. Изменения строк и чисел одного массива не влияют на другие массивы.Если к любому массиву добавляется новый элемент, на другой массив это не влияет.
Следующий код объединяет два массива:
alpha=new Array("a","b","c")
numeric=new Array(1,2,3)
alphaNumeric=alpha.concat(numeric) // создаёт массив ["a","b","c",1,2,3]
Следующий код объединяет три массива:
num1=[1,2,3]
num2=[4,5,6]
num3=[7,8,9]
nums=num1.concat(num2,num3) // создаёт массив [1,2,3,4,5,6,7,8,9]
Специфицирует функцию, которая создаёт прототип объекта. Заметьте, что значением этого свойства является ссылка на саму функцию, а не строка, содержащая имя функции.
См. Object.constructor
.
Для массива, созданного путём совпадения с регулярным выражением, индекс с базой 0 совпадения в строке.
Для массива, созданного путём совпадения с регулярным выражением, отражает строку-оригинал, относительно которой выполнялся поиск совпадений.
Объединяет все элементы массива в строку.
separator | Специфицирует строку для отделения каждого элемента массива. Сепаратор конвертируется в строку, если необходимо. Если отсутствует, элементы массива разделяются запятыми. |
Конверсия с строку всех объединяемых в строку элементов массива.
Следующий пример создаёт массив a с тремя элементами, затем объединяет массив трижды: используя сепаратор по умолчанию, запятую и пробел, затем знак "плюс".
a = new Array("Wind","Rain","Fire")
myVar1=a.join() // присваивает "Wind,Rain,Fire" переменной myVar1
myVar2=a.join(", ") // присваивает "Wind, Rain, Fire" переменной myVar1
myVar3=a.join(" + ") // присваивает "Wind + Rain + Fire" переменной myVar1
Беззнаковое 32-битное целое, специфицирующее количество элементов массива.
JavaScript 1.3: |
|
Значением
свойства length
является целое положительное число, меньшее, чем 2 в 32 степени (232).
Вы можете установить свойство length
для усечения массива в любой момент. Если Вы увеличиваете массив путём изменения его свойства length
,
реальное количество элементов не увеличивается; например, если Вы установите length
в 3, когда текущее значение 2, массив будет по прежнему содержать 2 элемента.
В этом примере функция getChoice
использует свойство length
для итерации по всем элементам массива musicType
. musicType
это элемент select
в форме musicForm
.
function getChoice() {
for (var i = 0; i < document.musicForm.musicType.length; i++) {
if (document.musicForm.musicType.options[i].selected == true) {
return document.musicForm.musicType.options[i].text
}
}
}
В этом примере массив statesUS
укорачивается до размера 50, если его текущий размер больше, чем 50.
if (statesUS.length > 50) {
statesUS.length=50
}
Удаляет последний элемент массива и возвращает этот элемент. Этот метод изменяет размер массива.
Следующий код создаёт массив myFish
,
содержащий 4 элемента, затем удаляет последний элемент.
myFish = ["angel", "clown", "mandarin", "surgeon"];
popped = myFish.pop();
Представляет
прототип для данного класса. Вы можете использовать прототип для добавления
свойств и методов во все экземпляры класса. О прототипах см.
Function.prototype
.
Добавляет один или более элементов в конец массива и возвращает новый размер массива. Этот метод изменяет размер массива.
JavaScript 1.3: | |
element1, ..., |
Поведение метода push
аналогично поведению функции push
из Perl 4. Обратите внимание, что оно отличается от поведения в Perl 5.
Метод push
возвращает последний элемент, добавленный к массиву.
Следующий код создаёт массив myFish
,
содержащий два элемента, затем добавляет к нему ещё два элемента. После
выполнения кода, pushed
содержит 4. (В JavaScript 1.2 pushed
после выполнения кода содержит "lion".)
myFish = ["angel", "clown"];
pushed = myFish.push("drum", "lion");
Переворачивает элементы массива: первый элемент массива становится последним, а последний - первым.
Метод reverse
переворачивает элементы вызывающего объекта массива.
Создаётся
массив myArray
, содержащиё три элемента, затем массив переворачивается.
myArray = new Array("one", "two", "three")
myArray.reverse()
Этот код изменяет массив myArray
так, что:
Удаляет первый элемент массива и возвращает этот элемент. Этот метод изменяет размер массива.
Следующий код отображает массив myFish
до и после удаления первого элемента. Он также
отображает удалённый элемент:
myFish = ["angel", "clown", "mandarin", "surgeon"];
document.writeln("myFish before: " + myFish);
shifted = myFish.shift();
document.writeln("myFish after: " + myFish);
document.writeln("Удалён этот элемент: " + shifted);
myFish before: ["angel", "clown", "mandarin", "surgeon"]
myFish after: ["clown", "mandarin", "surgeon"]
Удалён этот элемент: angel
Извлекает раздел массива и возвращает новый массив.
slice
не изменяет оригинальный массив, но возвращает новую копию "на один уровень
глубже", которая содержит копии элементов извлечённых из оригинального массива.
Элементы оригинального массива копируются в новый массив так:
slice
копирует ссылки на объекты в новый массив. И оригинальный, и новый массивы
ссылаются на один объект. Если объект, на который ссылаются, изменяется,
изменения отражаются в обоих массивах, новом и оригинальном.String
и Number
), slice
копирует строки и числа в новый массив. Изменения строки или числа в одном
массиве не оказывают влияния на другой массив.Если новый элемент добавляется к любому массиву, другой массив не изменяется.
В следующем примере slice
создаёт новый массив newCar
из myCar
. Оба содержат ссылку на объект myHonda
.
Если цвет myHonda
изменяется на purple
, оба массива отражают изменение.
<SCRIPT LANGUAGE="JavaScript1.2">
//Используя slice, создать newCar из myCar.
myHonda = {color:"red",wheels:4,engine:{cylinders:4,size:2.2}}
myCar = [myHonda, 2, "cherry condition", "purchased 1997"]
newCar = myCar.slice(0,2)
//Записать значения из myCar, newCar и цвет myHonda,
// на который имеются ссылки в обоих массивах.
document.write("myCar = " + myCar + "<BR>")
document.write("newCar = " + newCar + "<BR>")
document.write("myCar[0].color = " + myCar[0].color + "<BR>")
document.write("newCar[0].color = " + newCar[0].color + "<BR><BR>")
//Изменить цвет myHonda.
myHonda.color = "purple"
document.write("The new color of my Honda is " + myHonda.color +
"<BR><BR>")
//Записать цвет myHonda, на который ссылаются оба массива.
document.write("myCar[0].color = " + myCar[0].color + "<BR>")
document.write("newCar[0].color = " + newCar[0].color + "<BR>")
myCar = [{color:"red", wheels:4, engine:{cylinders:4, size:2.2}}, 2,
"cherry condition", "purchased 1997"]
newCar = [{color:"red", wheels:4, engine:{cylinders:4, size:2.2}}, 2]
myCar[0].color = red newCar[0].color = red
The new color of my Honda is purple
myCar[0].color = purple
newCar[0].color = purple
Если compareFunction
не предоставляется, элементы сортируются путём конвертирования их в строки и
сравнения строк в лексикографическом порядке ("словарь" или "телефонная книга,"
не числовой порядок). Например, "80" встанет перед "9" в
лексикографическом порядке, но при числовой сортировке 9 встанет перед 80.
Если compareFunction
предоставляется, массив элементов сортируется в соответствии с return-значением
функции сравнения. Если a и b это два сравниваемых элемента, тогда:
compareFunction(a, b)
меньше 0, сортирует от b
к a меньший индекс, чем a.compareFunction(a, b)
возвращает 0, оставляет a
и b без изменений друг относительно друга, но сортирует с учётом всех отличающихся элементов.compareFunction(a, b)
больше 0, сортирует от b к a больший индекс, чем a.
Итак, функция compare
имеет следующую форму:
function compare(a, b) {
if (a меньше, чем b, по некоторому критерию сортировки)
return -1
if (a больше, чем b,
по некоторому критерию сортировки)
return 1
// a обязано быть равно b
return 0
}
Чтобы
сравнить числа вместо строк, функция compare
может просто вычесть b из a:
function compareNumbers(a, b) {
return a - b
}
JavaScript использует стабильную сортировку: индекс взаимного расположения a и b не изменяется, если a и b равны. Если индекс a меньше, чем индекс b перед началом сортировки, он останется таким и после сортировки, независимо от того, как переместятся a и b после сортировки.
Поведение метода sort
отличается в JavaScript 1.1 и в JavaScript 1.2.
В JavaScript 1.1,
на некоторых платформах, метод sort
не работает. Этот метод работает на всех
платформах в JavaScript 1.2.
В JavaScript 1.2, этот метод больше не конвертирует undefined
-элементы в null
;
вместо этого он сортирует их до самого конца массива. Например, предположим, имеется скрипт:
<SCRIPT>
a = new Array();
a[0] = "Ant";
a[5] = "Zebra";
function writeArray(x) {
for (i = 0; i < x.length; i++) {
document.write(x[i]);
if (i < x.length-1) document.write(", ");
}
}
writeArray(a);
a.sort();
document.write("<BR><BR>");
writeArray(a);
</SCRIPT>
ant, null, null, null, null, zebra
ant, null, null, null, null, zebra
ant, undefined, undefined, undefined, undefined, zebra
ant, zebra, undefined, undefined, undefined, undefined
В следующем примере создаются 4 массива и выводится оригинальный массив, затем -
отсортированные массивы. Числовые массивы сортируются сначала без, а затем - с
использованием функции compare
.
<SCRIPT>
stringArray = new Array("Blue","Humpback","Beluga")
numericStringArray = new Array("80","9","700")
numberArray = new Array(40,1,5,200)
mixedNumericArray = new Array("80","9","700",40,1,5,200)
function compareNumbers(a, b) {
return a - b
}
document.write("<B>stringArray:</B> " + stringArray.join() +"<BR>")
document.write("<B>Sorted:</B> " + stringArray.sort() +"<P>")
document.write("<B>numberArray:</B> " + numberArray.join() +"<BR>")
document.write("<B>Sorted without a compare function:</B> " + numberArray.sort() +"<BR>")
document.write("<B>Sorted with compareNumbers:</B> " + numberArray.sort(compareNumbers)
+"<P>")
document.write("<B>numericStringArray:</B> " + numericStringArray.join() +"<BR>")
document.write("<B>Sorted without a compare function:</B> " + numericStringArray.sort()
+"<BR>")
document.write("<B>Sorted with compareNumbers:</B> " +
numericStringArray.sort(compareNumbers) +"<P>")
document.write("<B>mixedNumericArray:</B> " + mixedNumericArray.join() +"<BR>")
document.write("<B>Sorted without a compare function:</B> " + mixedNumericArray.sort()
+"<BR>")
document.write("<B>Sorted with compareNumbers:</B> " +
mixedNumericArray.sort(compareNumbers) +"<BR>")
</SCRIPT>
Как показано на выводе, если используется функция compare
,
числа сортируются корректно вне зависимости от того, являются они числами или строками чисел:
stringArray: Blue,Humpback,Beluga
Sorted: Beluga,Blue,Humpback
numberArray: 40,1,5,200
Sorted without a compare function: 1,200,40,5
Sorted with compareNumbers: 1,5,40,200
numericStringArray: 80,9,700
Sorted without a compare function: 700,80,9
Sorted with compareNumbers: 9,80,700
mixedNumericArray: 80,9,700,40,1,5,200
Sorted without a compare function: 1,200,40,5,700,80,9
Sorted with compareNumbers: 1,5,9,40,80,200,700
Изменяет содержимое массива, добавляя новые элементы и удаляя старые.
JavaScript 1.3: возвращает массив, содержащий удалённые элементы. | |
splice(index, howMany, [element1][, ..., elementN])
Если Вы специфицируете разное количество элементов для вставки и для удаления, массив в конце вызова будет иметь другой размер.
Метод splice
возвращает массив, содержащий удалённые элементы. Если
удалён только один элемент, возвращается массив из одного элемента.
Метод splice
возвращает
удалённый элемент, если удаляется только один элемент (параметр howMany
равен 1)
; иначе метод возвращает массив, содержащий удалённые элементы.
Следующий
скрипт иллюстрирует использование splice
:
<SCRIPT LANGUAGE="JavaScript1.2">
myFish = ["angel", "clown", "mandarin", "surgeon"];
document.writeln("myFish: " + myFish + "<BR>");
removed = myFish.splice(2, 0, "drum");
document.writeln("После добавления 1: " + myFish);
document.writeln("удалён
: " + removed + "<BR>");
removed = myFish.splice(3, 1)
document.writeln("После удаления 1: " + myFish);
document.writeln("удалён
: " + removed + "<BR>");
removed = myFish.splice(2, 1, "trumpet")
document.writeln("После
замещения
1: " + myFish);
document.writeln("удалён
: " + removed + "<BR>");
removed = myFish.splice(0, 2, "parrot", "anemone", "blue")
document.writeln("После замещения 2: " + myFish);
document.writeln("удалён: " + removed);
myFish: ["angel", "clown", "mandarin", "surgeon"]
После добавления
1: ["angel", "clown", "drum", "mandarin", "surgeon"]
удалён
: undefined
После удаления
1: ["angel", "clown", "drum", "surgeon"]
удалён
: mandarin
После замещения
1: ["angel", "clown", "trumpet", "surgeon"]
удалён: drum
После замещения
2: ["parrot", "anemone", "blue", "trumpet", "surgeon"]
удалён
: ["angel", "clown"]
Возвращает строку исходного кода массива.
Метод toSource
возвращает следующие значения:
Array
метод toSource
возвращает следующие строки, обозначающие недоступность исходного кода:Array
-экземпляров toSource
возвращает строку исходного кода.
Этот метод обычно вызывается внутренне в JavaScript, а не явно в коде. Вы можете
вызвать toSource
в ходе отладки, чтобы проверить содержимое массива.
Чтобы проверить исходный код массива:
alpha = new Array("a", "b", "c")
alpha.toSource() //возвращает ["a", "b", "c"]
Возвращает строку, представляющую специфицированный массив и его элементы.
Отсутствуют.
Объект Array
переопределяет метод toString
из Object
. Для объектов Array
метод toString
объединяет массив и возвращает одну строку, содержащую все элементы массива,
разделённые запятыми. Например, следующий код создаёт массив и использует toString
для конвертации массива в строку.
var monthNames = new Array("Jan","Feb","Mar","Apr")
myVar=monthNames.toString() // присваивает "Jan,Feb,Mar,Apr" переменной myVar
JavaScript вызывает метод toString
автоматически, когда массив представлен как текстовое значение или когда на
массив имеется ссылка при конкатенации строк.
Если Вы специфицируете LANGUAGE="JavaScript1.2"
в тэге <SCRIPT>, toString
возвращает строку, представляющую исходный код массива. Это то же самое
значение, что и значение, возвращаемое методом toSource
в JavaScript 1.3 и более поздних версиях.
<SCRIPT LANGUAGE="JavaScript1.2">
var monthNames = new Array("Jan","Feb","Mar","Apr")
myVar=monthNames.toString() // присваивает '["Jan", "Feb", "Mar", "Apr"]'
//
переменной myVar
</SCRIPT>
Добавляет один или более элементов в начало массива и возвращает новый размер массива.
arrayName.unshift(element1,..., elementN)
element1,..., |
Следующий
код отображает массив myFish
до и после добавления элементов:
myFish = ["angel", "clown"];
document.writeln("myFish до: " + myFish);
unshifted = myFish.unshift("drum", "lion");
document.writeln("myFish после: " + myFish);
document.writeln("Новый размер: " + unshifted);
myFish до: ["angel", "clown"]
myFish после: ["drum", "lion", "angel", "clown"]Новый размер
: 4
Возвращает примитивное значение массива.
Объект Array
наследует метод valueOf
из Object. Метод valueOf
из Array
возвращает
примитивное значение массива или примитивное значение его элементов таким образом:
Тип объекта элемента |
Тип данных возвращаемого значения |
---|---|
Этот метод обычно вызывается внутренне в JavaScript, а не явно в коде.
Copyright © 2000
Дата последнего обновления: 28 сентября 2000 г.