Перейти к содержимому

Как сложить элементы массива

  • автор:

Как сложить все элементы массива js

Можно использовать обычный цикл, но есть более красивое решение. Метод reduce() , принимает в качестве аргумента массив и колбек функцию, которая применяется к каждому элементу массива и таким образом позволяет найти их сумму. Вот пример:

const numbers = [1, 2, 3, 4]; const sumOfNumbers = numbers.reduce((acc, number) => acc + number, 0); console.log(sumOfNumbers); // => 10 

27 октября 2022

Немного улучшу reduce .

 acc + number); 

А за такое использование map могут и побить. Если уж и хочется из цикла что-то менять снаружи (что почти всегда плохая идея), то для этого используют forEach . Map возвращает значение, которое должно быть использовано. И map не должен менять ничего извне. Иначе код становится сложноподдерживаемым.

19 октября 2022

Помимо стандартного перебора значений и красивого метода reduce(), можно воспользоваться функцией высшего порядка map:

const numbers = [1, 2, 3]; let sum = 0; numbers.map((item) => sum += item); console.log(sum); // => 6 

И для любителей библиотеки Lodash доступен метод _.sum():

const numbers = [1, 2, 3]; console.log(_.sum(numbers)); // => 6 

Array.prototype.reduce()

Метод reduce() применяет функцию reducer к каждому элементу массива (слева-направо), возвращая одно результирующее значение.

Интерактивный пример

Синтаксис

array.reduce(callback[, initialValue])

Параметры

Функция, выполняющаяся для каждого элемента массива, принимает четыре аргумента:

Аккумулятор, аккумулирующий значение, которое возвращает функция callback после посещения очередного элемента, либо значение initialValue , если оно предоставлено (смотрите пояснения ниже).

Текущий обрабатываемый элемент массива.

Индекс текущего обрабатываемого элемента массива.

Массив, для которого была вызвана функция reduce .

Необязательный параметр. Объект, используемый в качестве первого аргумента при первом вызове функции callback .

Описание

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

При первом вызове функции, параметры accumulator и currentValue могут принимать одно из двух значений. Если при вызове reduce() передан аргумент initialValue , то значение accumulator будет равным значению initialValue , а значение currentValue будет равным первому значению в массиве. Если аргумент initialValue не задан, то значение accumulator будет равным первому значению в массиве, а значение currentValue будет равным второму значению в массиве.

Если массив пустой и аргумент initialValue не указан, будет брошено исключение TypeError . Если массив состоит только из одного элемента (независимо от его положения в массиве) и аргумент initialValue не указан, или если аргумент initialValue указан, но массив пустой, то будет возвращено одно это значение, без вызова функции callback .

Предположим, что reduce() используется следующим образом:

[0, 1, 2, 3, 4].reduce(function (previousValue, currentValue, index, array)  return previousValue + currentValue; >); 

Колбэк-функция будет вызвана четыре раза, аргументы и возвращаемое значение при каждом вызове будут следующими:

previousValue currentValue index array возвращаемое значение
первый вызов 0 1 1 [0, 1, 2, 3, 4] 1
второй вызов 1 2 2 [0, 1, 2, 3, 4] 3
третий вызов 3 3 3 [0, 1, 2, 3, 4] 6
четвёртый вызов 6 4 4 [0, 1, 2, 3, 4] 10

Значение, возвращённое методом reduce() будет равным последнему результату выполнения колбэк-функции — 10 .

Если же вы зададите начальное значение initialValue , результат будет выглядеть так:

[0, 1, 2, 3, 4].reduce(function (accumulator, currentValue, index, array)  return accumulator + currentValue; >, 10); 
accumulator currentValue index array возвращаемое значение
первый вызов 10 0 0 [0, 1, 2, 3, 4] 10
второй вызов 10 1 1 [0, 1, 2, 3, 4] 11
третий вызов 11 2 2 [0, 1, 2, 3, 4] 13
четвёртый вызов 13 3 3 [0, 1, 2, 3, 4] 16
пятый вызов 16 4 4 [0, 1, 2, 3, 4] 20

Значение, возвращённое методом reduce() на этот раз, конечно же, будет равным 20 .

Примеры

Суммирование всех значений в массиве

var total = [0, 1, 2, 3].reduce(function (a, b)  return a + b; >); // total == 6 

Суммирование значений в массиве объектов

Чтобы суммировать значения, содержащиеся в массиве объектов, вы должны указать initialValue , чтобы каждый элемент смог пройти через callback .

var initialValue = 0; var sum = [ x: 1 >,  x: 2 >,  x: 3 >].reduce(function ( accumulator, currentValue, )  return accumulator + currentValue.x; >, initialValue); // sum == 6 

Тоже самое, но со стрелочной функцией:

var initialValue = 0; var sum = [ x: 1 >,  x: 2 >,  x: 3 >].reduce( (accumulator, currentValue) => accumulator + currentValue.x, initialValue, ); // sum == 6 

Разворачивание массива массивов

var flattened = [ [0, 1], [2, 3], [4, 5], ].reduce(function (a, b)  return a.concat(b); >); // flattened равен [0, 1, 2, 3, 4, 5] 

Пример: склеивание массивов, содержащихся в объектах массива, с использованием оператора расширения и initialValue

// friends - список из объектов(друзей) // где поле "books" - список любимых книг друга var friends = [  name: "Anna", books: ["Bible", "Harry Potter"], age: 21 >,  name: "Bob", books: ["War and peace", "Romeo and Juliet"], age: 26 >,  name: "Alice", books: ["The Lord of the Rings", "The Shining"], age: 18 >, ]; // allbooks - список, который будет содержать все книги друзей + // дополнительный список указанный в initialValue var allbooks = friends.reduce( function (prev, curr)  return [. prev, . curr.books]; >, ["Alphabet"], ); // allbooks = ["Alphabet", "Bible", "Harry Potter", "War and peace", // "Romeo and Juliet", "The Lord of the Rings", "The Shining"] 

Полифил

Метод Array.prototype.reduce() был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать reduce() в реализациях, которые не поддерживают этот метод.

// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.21 // Ссылка (en): http://es5.github.io/#x15.4.4.21 // Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.21 if (!Array.prototype.reduce)  Array.prototype.reduce = function (callback /*, initialValue*/)  "use strict"; if (this == null)  throw new TypeError("Array.prototype.reduce called on null or undefined"); > if (typeof callback !== "function")  throw new TypeError(callback + " is not a function"); > var t = Object(this), len = t.length >>> 0, k = 0, value; if (arguments.length >= 2)  value = arguments[1]; > else  while (k  len && !(k in t))  k++; > if (k >= len)  throw new TypeError("Reduce of empty array with no initial value"); > value = t[k++]; > for (; k  len; k++)  if (k in t)  value = callback(value, t[k], k, t); > > return value; >; > 

Спецификации

Specification
ECMAScript Language Specification
# sec-array.prototype.reduce

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

Хочу сложить элементы массива, так , как это делалось бы в столбик на бумаге

Есть три массива : в первый ввожу число ,например, 12345, во второй ввожу число 22222 , соответственно в третий массив записываю результат сложения этих двух чисел, так , как будто бы это было посчитано на бумажке(ну сложение в столбик) Вот код:(ошибка в нем есть, конечно же)

#define _CRT_SECURE_NO_WARNINGS #include #include void main(void) < int A[5], B[5], C[10], i = 0, j = 0, k = 10; for (i = 0; i < 5; i++) < A[i] = getchar(); >for (i = 0; i < 5; i++) < B[i] = getchar(); >for (i = 4; i >= 0; i--) < for (j = 4; j for (i = 0; i _getch(); > 

Вот еще один вопрос: насколько целесообразно вводить посимвольно цифры числа через getchar() , просто иначе придется постоянно нажимать Enter после ввода каждой цифры.И можно ли хранить знак минус в интовом массиве ,

Отслеживать
задан 29 ноя 2017 в 18:38
1,790 1 1 золотой знак 21 21 серебряный знак 37 37 бронзовых знаков

Для начала, обнулите массивы, вводите . = getchar() — ‘0’; (получите бинарное представление десятичных цифр), обязательно проверяйте и если получили неправильное число, переходите к следующему шагу. А при сложении учитывайте перенос в старший разряд. И кстати, вложенные циклы при сложении — это ошибка.

Метод reduce

Метод reduce сворачивает массив к одному значению (редуцирует). К примеру, с помощью этого метода можно легко найти сумму элементов массива (то есть массив сведется к одному значению — к сумме элементов).

Первым параметром метод reduce получает функцию, которая последовательно выполнится для каждого элемента массива, начиная с первого. В эту функцию можно передавать 4 параметра. Если эти параметры есть (они не обязательны), то в первый автоматически попадет , во второй попадет элемент массива, в третий — его номер в массиве (индекс), а в четвертый — сам массив.

Промежуточный результат — это переменная, в которой будет накапливаться то значение, которое вернет метод reduce , когда переберет все элементы массива. К примеру, туда последовательно можно накапливать сумму элементов массива: сначала положить первый элемент, при следующем проходе цикла уже сумму первого элемента и второго, при следующем проходе — сумму первого, второго и третьего. И так, пока массив не закончится. Функция, которую принимает reduce , должна возвращать новое значение промежуточного результата.

Вторым параметром метода reduce указывается начальное значение промежуточного результата. Если его не указать, то оно будет равно первому элементу массива, а обработка элементов начнется со второго элемента.

Синтаксис

массив.reduce(function(промежуточный результат, элемент, индекс, массив) < return новый промежуточный результат; >, начальное значение);

Пример

Найдем сумму элементов массива:

let arr = [1, 2, 3, 4, 5, 6]; let res = arr.reduce(function(sum, elem) < return sum + elem; >, 0); console.log(res);

Результат выполнения кода:

Пример

Давайте найдем сумму всех положительных чисел массива:

let arr = [1, -2, -3, 4, 5, -6]; let res = arr.reduce(function(sum, elem) < if (elem >= 0) < return sum + elem; >else < return sum; >>); console.log(res);

Результат выполнения кода:

Смотрите также

  • метод reduceRight ,
    выполняющий похожую операцию
  • метод filter ,
    который позволяет фильтровать элементы массива
  • методы map и forEach ,
    которые позволяют применить функцию к каждому элементу массива
  • методы some и every ,
    выполняющие проверку массива

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Luxury Car Rental in Miami | Reserve a Premium Vehicle with RealCar