среда, 1 октября 2014 г.

JavaScript: Массивы

Создание пустого массива:

var a = [];

Элементами массива могут быть любые значения - строковые, числовые и булевские литералы, объекты и функции. Создание массива с элементами:

var b = [1, true, "foo", 
    { x: 25, text: "source", f: function() { return 10 } },
    function() { return 25 }];

Над элементами массива можно выполнять те же действия, что и над их содержимым - обращаться к полям объекта, вызывать функции или методы объектов.

b[0];      // > 1
b[3].text; // > 'source'
b[3]['x']; // > 25
b[3].f();  // > 10
b[4]();    // > 25

Количество элементов массива хранится в свойстве length:

a.length(); // > 0
b.length(); // > 5

Индексация начинается с 0 и заканчивается (length - 1).


Изменяя свойство length можно менять длину массива. При установке length меньше текущей величины, "лишние" элементы массива теряются безвозвратно, при установке length больше текущей величины, массив дополняется до нужной длины элементами со значением undefined. Можно полностью обнулить массив, задав length = 0;


При обращении к элементу с несуществующим индексом вернётся значение undefined;

b[5]; // > undefined


При установке элемента с несуществующим индексом массив автоматически увеличит размерность, а элементы со всеми отсутствующими индексами будут установлены в undefined;

z = [1];
z[3] = 5;
z;         // [ 1, , , 5]


Для добавления в конец массива элемента можно использовать следующую конструкцию:

b[b.length()] = 100;

b.length();        // 6
b[b.length() - 1]; // > 100

Массив можно использовать как стек, добавляя в конец и убирая последнее значения при помощи типовых стековых методов push/pop:

a.push(10);
a.push(20);
a;       // > [ 10, 20 ]
a.pop(); // > 20
a;       // > [ 10 ]

Методы unshift/shift делают то же самое с началом массива:

a.unshift(1);
a.unshift(5)
a;         // > [5, 1, 10]
a.shift(); // > 5
a;         // > [ 1, 10 ];

Эти методы гораздо медленнее push/pop, т.к. требуют сдвига всего массива.

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

с = [ 1 ];
c.unshift(10, 20, 30); // > 4
c.push(100, 200, 300); // > 7
c;                     // > [ 10, 20, 30, 1, 100, 200, 300 ]


Массив может создаваться как объект типа Array с использованием new. Если конструктор Array имеет один численный аргумент n, то создается пустой массив, содержащий n элементов со значением undefined. В противном случае массив заполняется значениями, переданными в качестве параметров конструктора.

var x = new Array(3);
x;                                // > [ , , ]
var y = new Array('a', 'b', 'c');
y;                                // > [ 'a', 'b', 'c' ]

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

var matrix = [ [1, 2, 3], [4], [7, 8, 9] ];
matrix[0][0]; // > 1
matrix[1][2]; // > undefined
matrix[1][2] = 6;
matrix;       // > [ [ 1, 2, 3 ], [ 4, , 6 ], [ 7, 8, 9 ] ];

Массив, подобно любому объекту, может содержать нестандартные свойства и даже элементы с отрицательными индексами:

var p = [ 1, 2];
p.x = 10;
p[-1] = 20;

При этом отрицательные индексы как свойства массива выводятся в виде строки.

p; // > [ 1, 2, x: 10, '-1': 20 ]

"Нестандартные" свойства не участвуют, например, в сортировке и прочих методах. работающих с элементами массива, а работа браузера с такими массивами замедляется.


Комментариев нет :

Отправить комментарий