Сейчас мы с вами разберем некоторые приемы при работе с обычными и многомерными массивами. Давайте приступим.
Заполнение массивов
Давайте заполним массив десятью иксами 'x'. Для этого воспользуемся методом push:
var arr = [];
for (var i = 0; i < 10; i++) {
arr.push('x');
}
console.log(arr); //выведет ['x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x']
Давайте теперь заполним массив числами от 1 до 10:
var arr = [];
for (var i = 1; i <= 10; i++) {
arr.push(i);
}
console.log(arr); //выведет [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Можно не использовать push, а указать ключи напрямую:
var arr = [];
for (var i = 0; i < 10; i++) {
arr[i] = 'x';
}
console.log(arr); //выведет ['x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x']
var arr = [];
for (var i = 0; i < 10; i++) {
arr[i] = i + 1;
}
console.log(arr); //выведет [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Переворот массива
Давайте из массива ['a', 'b', 'c', 'd', 'e'] сделаем ['e', 'd', 'c', 'b', 'a']. Для этого переберем исходный массив с конца и запишем его элементы в новый массив - они будут идти в обратном порядке:
var arr = ['a', 'b', 'c', 'd', 'e'];
var result = [];
for (var i = arr.length - 1; i >= 0; i--) {
result.push(arr[i]);
}
console.log(result); //выведет ['e', 'd', 'c', 'b', 'a']
Переворот объекта
Давайте поменяем ключи и значения в объекте, например из {a: 1, b: 2, c: 3, d: 4, e: 5} сделаем {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}.
Для этого переберем циклом for-in исходный объект и создадим при этом новый объект result. Ключами нового объекта сделаем элементы старого (это obj[key]), а значениями нового объекта - ключи старого (это key):
var obj = {a: 1, b: 2, c: 3, d: 4, e: 5};
var result = {};
for (var key in obj) {
result[obj[key]] = key;
}
console.log(result); //выведет {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
Подсчет количества элементов
Пусть дан массив ['a', 'b', 'c', 'a', 'a', 'b']. Давайте подсчитаем количество одинаковых элементов в этом массиве и сделаем результат в виде объекта {a: 3, b: 2, c: 1}.
Для решения сделаем объект count с начальным значением {a: 0, b: 0, c: 0}. Будем перебирать массив циклом и увеличивать соответствующее значение в объекте count. К примеру: если текущий элемент массива - это 'a', то увеличим count['a'] на единицу - вот так: count['a']++.
Только вместо 'a' следует подставлять текущий элемент массива, вот так: count[arr[i]]++. Давайте напишем окончательный код:
var arr = ['a', 'b', 'c', 'a', 'a', 'b'];
var count = {a: 0, b: 0, c: 0};
for (var i = 0; i < arr.length; i++) {
count[arr[i]]++;
}
console.log(count); //выведет {a: 3, b: 2, c: 1}
Пойдем дальше: то, что объекта count имеет изначальное значение {a: 0, b: 0, c: 0} - не очень удобно, ведь мы обычно не знаем, какие элементы есть в массиве.
Пусть объект count формируется автоматически таким образом: если такого элемента в count нет, то ему следует присвоить значение 1, а если есть - просто увеличить значение на единицу:
var arr = ['a', 'b', 'c', 'a', 'a', 'b'];
var count = {};
for (var i = 0; i < arr.length; i++) {
if (count[arr[i]] === undefined) {
count[arr[i]] = 1;
} else {
count[arr[i]]++;
}
}
console.log(count); //выведет {a: 3, b: 2, c: 1}
Перебор многомерных массивов
Пусть дан следующий двухмерный массив:
var arr = [[1, 2, 3, 4, 5], [6, 7, 8], [9, 10]];
Давайте выведем все его элементы на экран. Для этого нам необходимо запустить два вложенных друг в друга цикла:
var arr = [[1, 2, 3, 4, 5], [6, 7, 8], [9, 10]];
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr[i].length; j++) {
alert(arr[i][j]);
}
}