Array methods Flashcards
Not safety ways to copy array
Значения копируются по ссылке, а не по значению, поэтому копирование не безопасное, если массив содержит объекты.
- С помощью spread:
numbers = [1, 2, 3];
numbersCopy = […numbers];
numbers = [1, 2, 3];
numbersCopy = [];
- С помощью циклов:
for (i = 0; i < numbers.length; i++) {
numbersCopy[i] = numbers[i];
}
или
while (++i < numbers.length) {
numbersCopy[i] = numbers[i];
}
- numbersCopy = numbers.map((x) => x);
- numbersCopy = numbers.filter(() => true);
- numbersCopy = numbers.reduce((newArray, element) => {
newArray.push(element);
return newArray;
}, []);
- numbersCopy = numbers.slice();
- numbersCopy = numbers.concat();
- numbersCopy = Array.from(numbers);
Safety way to copy array
JSON.parse and JSON.stringify (Deep copy)
JSON.stringify превращает объект в строку.
JSON.parse превращает строку в объект.
Их объединение может превратить объект в строку, а затем обратить процесс вспять, чтобы создать совершенно новую структуру данных.
nestedNumbers = [[1], [2]];
numbersCopy = JSON.parse(JSON.stringify(nestedNumbers));
Array.prototype.slice()
arr.slice([begin[, end]])
извлекает элементы с индексом меньше end.
Возвращает новый массив, содержащий копию части исходного массива.
Array.prototype.splice() (mutating)
array.splice(start[, deleteCount[, item1[, item2[, …]]]])
deleteCount (необязательный)
Количество удаляемых из массива элементов
itemN (необязательный)
Добавляемые к массиву элементы. Если отсутствуют, то splice() просто удалит элементы из массива.
Изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые.
Array.prototype.filter()
filter((element, index, array) => { … } )
Создаёт новый массив со всеми элементами, прошедшими проверку, задаваемую в передаваемой функции.
Array.prototype.fill() (mutating)
arr.fill(value[, start = 0[, end = this.length]])
Заполняет все элементы массива от начального до конечного индексов одним значением (value).
Flatten array
var newArray = arr.flat(depth);
depth (необязательный)
На сколько уровней вложенности уменьшается мерность исходного массива. По умолчанию 1.
Неизвестная глубина:
arr.flat(Infinity);
Метод flat удаляет пустые слоты из массива.
Развертывание многомерного массива через цикл:
function func(arr) {
let res = [];
for (let el of arr) {
if (typeof el === ‘object’) {
res = res.concat(func(el));
} else {
res.push(el)
}
}
return res;
}
Для развёртывания многомерных массивов используем рекурсию, reduce и concat.
Пример:
const arr = [1, 2, [3, 4, [5, 6]]];
function flatDeep(arr, d = 1) {
return d > 0 ? arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), [])
: arr.slice();
};
flatDeep(arr, Infinity);
// [1, 2, 3, 4, 5, 6]
Array.prototype.forEach()
Выполняет указанную функцию один раз для каждого элемента в массиве.
arr.forEach(function callback(currentValue, index, array) {
//your iterator
}[, thisArg]);
thisArg (необязательный)
Значение, используемое в качестве this при вызове функции callback.
Возвращает undefined.
CB не будет вызвана для удалённых или пропущенных элементов массива. Однако, она будет вызвана для элементов, которые присутствуют в массиве и имеют значение undefined.
Array.prototype.map()
Создаёт новый массив с результатом вызова указанной функции для каждого элемента массива.
const new_array = arr.map(function callback( currentValue[, index[, array]]) {
// Возвращает элемент для new_array
}[, thisArg])
thisArg (необязательный)
Значение, используемое в качестве this при вызове функции callback.
Возвращает новый массив с результатами применения CB к каждому элементу старого массива.
Array.prototype.push() (mutating)
Добавляет один или более элементов в конец массива и возвращает новую длину массива.
arr.push(element1, …, elementN)
Возвращает новое значение свойства length объекта, для которого был вызван данный метод.
Array.prototype.pop() (mutating)
Удаляет последний элемент из массива и возвращает его значение.
arr.pop()
Возвращает последний элемент массива или undefined, если массив пуст.
Array.prototype.sort() (mutating)
На месте сортирует элементы массива и возвращает отсортированный массив.
arr.sort([compareFunction])
compareFunction - необязательный. Указывает функцию, определяющую порядок сортировки. Если опущен, сортируется в соответствии со значениями кодовых точек каждого символа Unicode, полученных путём преобразования каждого элемента в строку.
Возвращает отсортированный тот же самый массив (не копию!).
Array.prototype.reverse() (mutating)
На месте обращает порядок следования элементов массива. Первый элемент массива становится последним, а последний — первым.
array.reverse()
Array.prototype.shift() (mutating)
Удаляет первый элемент из массива. Этот метод изменяет длину массива.
arr.shift()
Возвращает значение удаленного элемента.
Array.prototype.unshift() (mutating)
Добавляет один или более элементов в начало массива и возвращает новую длину массива.
arr.unshift(element1[, …[, elementN]])
Возвращает новое свойство length объекта, над которым был вызван метод unshift.