Подробнее о массивах, свойствах и связанных методах javascript

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

Есть два способа объявить массив в javascript:

  • Использование литералов массива - это просто пара квадратных скобок, за которыми следуют ноль или более элементов значений, разделенных запятыми, например -
var foo = [];
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
  • Использование конструктора массива - он просто создает массив с использованием нового ключевого слова, например -
var foo = new Array();
var days = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');

Как мы знаем, массив - это просто реализация объектов в javascript. Массивы в javascript наследуют Array.prototype, тогда как объекты наследуют Object.prototype. С Array.prototype массивы наследуют несколько свойств и множество полезных методов, которые делают более удобным использование объектов в javascript.

Свойства -

length - свойство length массива представляет собой наибольший положительный целочисленный ключ плюс один. Если мы используем отрицательное (-ive) целое число, число с плавающей запятой или строку в качестве индекса, мы увидим их в массиве, но длина массива будет только наивысшим положительным целым числом плюс один. И еще одна важная вещь - это то, что только положительные элементы индекса массива доступны в цикле for. Давайте приведем несколько примеров -

var foo = [];   
console.log(foo); //0
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; 
console.log(days) //7
var foobar = ['zero', 'one', 'Two']; 
foobar[10] = 'Ten';
foobar[-5] = 'minus Five'; 
foobar['stringKey'] = 'string Key';
console.log(foobar.length); //11
console.log(foobar); //["zero", "one", "Two", undefined × 7, "Ten",-5: "minus Five", stringKey: "string Key"]

Методы -

Есть много методов, связанных с массивами в javascript, некоторые методы изменяют существующий массив (методы мутатора), некоторые используются для доступа к значениям или возврата некоторого требуемого представления и не изменяют существующий массив (методы доступа), некоторые для перебора элементов массива (Методы итератора) и так далее. Давайте рассмотрим некоторые из наиболее часто используемых этих методов и категорий на основе их природы.

Методы мутатора -

  • Array.prototype.push() - push добавляет один или несколько элементов в конец массива и возвращает обновленную длину массива.
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
days.push('Saturday'); //7
console.log(days); //["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
  • Array.prototype.pop()— метод pop удаляет последний элемент из массива и возвращает этот удаленный элемент.
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
days.pop(); //Friday
console.log(days); //["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"]
  • Array.prototype.shift()— аналогично методу pop, shift удаляет первый элемент из массива и возвращает этот элемент.
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
days.shift(); //Sunday
console.log(days); //[ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
  • Array.prototype.unshift() - аналогично методу push, метод unshift добавляет один или несколько элементов в начало массива и возвращает обновленную длину массива.
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
days.unshift('Saturday'); //7
console.log(days); //[ "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
  • Array.prototype.sort() - этот метод сортирует элементы массива и возвращает новый отсортированный массив.
var numbers = [3,45,5,7,32,56,87,11];
numbers.sort(); //[11, 3, 32, 45, 5, 56, 7, 87]
console.log(numbers);  //[11, 3, 32, 45, 5, 56, 7, 87]
  • Array.prototype.reverse() - этот метод меняет порядок элементов существующего массива, т.е. первый элемент массива становится последним, а последний элемент становится первым элементом.
var numbers = [3,45,5,7,32,56,87,11];
numbers.reverse(); //[11, 87, 56, 32, 7, 5, 45, 3]
  • Array.prototype.splice() - этот метод изменяет существующий массив, добавляя новые элементы или удаляя элементы из массива. Метод соединения может принимать любое количество аргументов, первый - это начальный индекс, и он является обязательным, второй - это счетчик удалений, то есть количество удаляемых элементов из начального индекса, если задано 0, то ничего не будет удаляться, это необязательно и остальные аргументы - это элементы, которые нужно добавить по данному индексу.
Syntax - 
array.splice(start, deleteCount, item1, item2, ...)
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
days.splice(2,1); //["Tuesday"]
console.log(days); //["Sunday", "Monday", "Wednesday", "Thursday", "Friday"]
days.splice(2,0,'Tuesday');
console.log(days) //["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]

Методы доступа -

  • Array.prototype.slice() - метод slice может принимать два аргумента, первый - это начальный индекс, а второй - конечный индекс, и возвращает массив, содержащий только элементы между этими двумя индексами. Начальный индекс является обязательным, конечный индекс необязательным, если конечный индекс не указан, извлеките до конца массива.
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
days.slice(2,4); //["Tuesday", "Wednesday"]
days.slice(3); //["Wednesday", "Thursday", "Friday"]
  • Array.prototype.concat() - этот метод используется для объединения или склеивания массивов вместе и возвращает новый объединенный массив массивов.
var week_days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
var weekend_days = ['Saturday', 'Sunday'];
week_days.concat(weekend_days); //["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
  • Array.prototype.join() - этот метод сглаживает все элементы массива в одну строку. Аргумент, переданный в join, приклеивается между элементами массива при присоединении к строке.
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
days.join('-'); //Sunday-Monday-Tuesday-Wednesday-Thursday-Friday
  • Array.prototype.includes() - возвращает true или false, содержит ли массив определенный элемент, который передается в качестве аргумента в функции include.
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
days.includes('Sunday'); //true
days.includes('sunday'); //false
  • Array.prototype.indexOf()— Возвращает индекс первого (наименьшего) вхождения элемента в заданном массиве, или -1, если ничего не найдено. Он также принимает второй аргумент, который является необязательным, и указывает, с чего начать.
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
days.indexOf('Tuesday'); //2
days.indexOf('Tuesday', 4); //-1
days.indexOf('March'); //-1
  • Array.prototype.lastIndexOf()— Возвращает индекс последнего (наибольшего) вхождения элемента в заданном массиве, или -1, если ничего не найдено. Он также принимает второй аргумент, который является необязательным, и указывает, с чего начать.
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
days.lastIndexOf('Tuesday'); //2
days.lastIndexOf('Tuesday', 4); //2
days.lastIndexOf('March'); //-1

Методы итерации -

  • Array.prototype.filter() — Он перебирает каждый элемент данного массива и возвращает новый массив, содержащий только те элементы, которые предоставленная функция фильтрации возвращает истину.
var random_numbers = [2,4,5,6,7,9,34,26,45,39];
random_numbers.filter(function(element){
 return element % 2;
});
//[5, 7, 9, 45, 39]
  • Array.prototype.find() — аналогично методу filter, он также перебирает массив и возвращает только первый элемент массива, который возвращает true с предоставленными условиями или функциональностью.
var random_numbers = [2,4,5,6,7,9,34,26,45,39];
random_numbers.find(function(element){
 return element > 20;
});
//34
  • Array.prototype.forEach() —Он выполняет итерацию и вызывает функцию для каждого элемента в массиве. Эту функцию обратного вызова можно вызвать с тремя параметрами: первый - это элемент массива, второй - это индекс этого элемента, а третий - проходимый массив. .
var random_numbers = [1,2,4,5,6,7];
function logArrayElements(element, index, array) {
  console.log('a[' + index + '] = ' + element);
}
random_numbers.forEach(logArrayElements);
//a[0] = 11
//a[1] = 21
//a[2] = 41
//a[3] = 51
//a[4] = 61
//a[5] = 71
  • Array.prototype.map() - Создает новый массив с результатами вызова предоставленной функции для каждого элемента в этом массиве.
var random_numbers = [1,2,4,5,6,7];
var doubledArray = random_numbers.map(function(element){
  return element * 2;
});
console.log(doubledArray); //[2, 4, 8, 10, 12, 14]
  • Array.prototype.reduce()— Обходит массив (слева направо) и вызывает функцию обратного вызова для каждого элемента. Возвращаемое значение постепенно передается от обратного вызова к обратному вызову, а в конце reduce() возвращает совокупное значение.
Syntax - 
array.reduce(function(total, currentValue, currentIndex, arr), initialValue);
var rockets = [
     {country:'Russia', launches:32 },     
     { country:'US', launches:23 },     
     { country:'China', launches:16 },     
     { country:'Europe(ESA)', launches:7 },     
     { country:'India', launches:4 },     
     { country:'Japan', launches:3 } ];  
var sum = rockets.reduce(function(total, elem) {     
   return total + elem.launches; }, 0);    
sum // 85

map(), reduce() и filter() как мощные альтернативы при просмотре элементов, нахождении совокупных значений или управлении подмножествами при определенных условиях. Эти вспомогательные методы снижают сложность, работают без побочных эффектов и делают код более читабельным и поддерживаемым.

Это почти все, что касается массивов в javascript.

«У каждого конца есть начало».
- Либба Брей, Великая и ужасная красавица