создать функцию которая складывает значения элементов
function sumArray() {
for (let i = 0; i < arr1.length; i++) {
arr3.push(arr1[i] + arr2[i])
}
}
let arr1 = [1, 2, 3, 4];
let arr2 = [1, 2, 3, 4];
let arr3 = []
console.log(sumArray(arr3))
Что не так, почему мне не складывает 2 массива? Нужно через цикл.
создать функцию которая складывает значения элементов с одинаковыми индексами и возвращает новый результирующий массив.
**EXAMPLE:
[1,2,3,4]
[2,3,4,5]
результат
[3,5,7,9]**
Ответы (2 шт):
Вы ничего не возвращаете из своей функции. Массивы складываются, но третий массив просто не выводится, так как функция его не возвращает.
Обычно функция не должна оперировать с внешними переменными, она должна получать значения в аргументах и возвращать новое значение.
Попробуйте так:
function sumArray(array1, array2) {
let array3 = [];
for (let i = 0; i < array1.length; i++) {
array3.push(array1[i] + array2[i]);
}
return array3;
}
let arr1 = [1, 2, 3, 4];
let arr2 = [1, 2, 3, 4];
console.log(sumArray(arr1, arr2));
Немного дополню ответ @vsemozhebuty
Учитывая нынешнюю реализацию, если в первом массиве будет больше эл-тов чем во втором - получите массив с NaN'ами (будут складываться числа с первого + undefined со второго = Not a Number).
Как минимум, можно просто добавить проверку - если undefined то суммируем ноль.
function sumArray(array1, array2) {
let array3 = [];
for (let i = 0; i < array1.length; i++) {
array3.push( (array1[i] || 0) + (array2[i] || 0) );
}
return array3;
}
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [1, 2, 3, 4];
console.log(sumArray(arr1, arr2));
Так же, касательно длины массива:
А почему вы смотрите только на длину первого массива? Не лучше ли будет брать max/min длину и возвращать массив равный ей?
function sumArray(array1, array2) {
let array3 = [],
len = Math.max(array1.length, array2.length); // или Math.max(...)
for (let i = 0; i < len; i++) {
array3.push( (array1[i] || 0) + (array2[i] || 0) );
}
return array3;
}
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [1, 2, 3, 4, 7, 0, 3];
console.log(sumArray(arr1, arr2));
И, добавлю вариант с любым кол-вом массивов, но без цикла for:
function sumArray(...arrays) {
let max = arrays.reduce((e, n) => Math.max(e, n.length), 0);
return Array.from({length: max}).map((i, idx) => arrays.reduce((sum, curr) => sum + (curr[idx] || 0), 0));
}
let arr1 = [1, 2, 3, 4, 6, 8, 9];
let arr2 = [1, 2, 3, 4, 5];
let arr11 = [1, 2, 3, 4, 6, 8, 9];
let arr22 = [1, 2, 3, 4, 5];
console.log(sumArray(arr1, arr2, arr11, arr22));
И, тоже вариант для любого кол-ва массивов, но уже используя цикл for:
function sumArray(...arrays) {
let arr = [];
let max = Math.max(...arrays.map(e => e.length));
for ( let a = 0; a < max; a++ ) {
sum = 0;
for ( let i = 0; i < arrays.length; i++ ) {
sum += arrays[i][a] || 0;
}
arr.push(sum);
}
return arr;
}
let arr1 = [1, 2, 3, 4, 6, 8, 9];
let arr2 = [1, 2, 3, 4, 5];
let arr11 = [1, 2, 3, 4, 6, 8, 9];
console.log(sumArray(arr1, arr2, arr11));