Есть массив JavaScript:
var massiv = [1,2,3,4,5,6,7,8,9,10]
Мы хотим увеличить все числа в этом массиве на 100.
Решение задачи — простое
Чтобы решить задачу нужно использовать метод объектов-прототипов Array, который называется map(). Он ходит по каждому элементу основного массива, делает преобразования и возвращает новый массив такой же длины (с такой же последовательностью)
massiv.map(i => i + 100)
Вывод в консоль браузера:
Можно сделать ещё круче и написать свой собственный универсальный метод для конструктора объектов Array.
Крутое решение задачи — Свой метод
Array.prototype.plus = function (x) { return this.map(i => i + x) }
Мы написали свой собственный метод для обработки массивов. Теперь мы можем вызывать метод plus() на любом массиве. Но самое крутое, что мы теперь можем передавать любое число, на которое хотим увеличивать наши массивы. Пример ниже:
massiv.plus(5) [6, 7, 8, 9, 10, 11, 12, 13, 14, 15] massiv.plus(21) [22, 23, 24, 25, 26, 27, 28, 29, 30, 31] massiv.plus(1010) [1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020]
Вывод в консоль браузера:
А ещё здорово то, что наш метод может работать в противоположную сторону. То есть мы можем менять знак у передаваемого параметра.
massiv.plus(-5) [-4, -3, -2, -1, 0, 1, 2, 3, 4, 5] massiv.plus(-20) [-19, -18, -17, -16, -15, -14, -13, -12, -11, -10] massiv.plus(-88) [-87, -86, -85, -84, -83, -82, -81, -80, -79, -78]
Теперь наш код будет выглядеть короче и понятней. Но нужно помнить, что этот метод будет адекватно работать только для однородных массивов из типа данных Number.
Попытка вызвать его на строках вызовет печальный результат:
["1","2","3","4","5","6","7","8","9","10"].plus(5)
Вернёт ["15", "25", "35", "45", "55", "65", "75", "85", "95", "105"]
Сработает конкатенация строк. Передаваемое число в методе plus() на каждой итерации внутреннего map() будет преобразовываться в строку. Одна строка «слипнется» с другой. Результат будет ошибочным.
Увеличение всех чисел в массиве циклом FOR OF
Можно использовать специальный цикл FOR OF, который умеет выдёргивать ЗНАЧЕНИЯ из ключей объектов. В нашем случае массив — это тоже объект.
В массиве ключами являются индексы, а значениями — значения.
Цикл FOR нельзя использовать самостоятельно без оборачивания в функцию. Также цикл FOR нельзя присвоить в переменную. Поэтому функция будет выглядеть так:
function adddigit (array, digit){ let newarray = []; for(let element of array){newarray.push(element += digit)}; return newarray; }
Пример работы функции
adddigit([1,2,3,4,5,6], 50) [51, 52, 53, 54, 55, 56]
Скриншот
Информационные ссылки
Стандарт ECMAScript — Массивы — https://tc39.es/ecma262/#sec-array-objects