#javascript
#javascript
Вопрос:
Я новичок в Javascript. Я провел некоторое исследование и до сих пор не могу понять, как вернуть сумму array1
и добавить ее к каждому числу array2
. Вместо этого мой код добавляет сумму обоих массивов. Я хочу, чтобы ожидаемый журнал был [11, 13, 15]
function addingAllTheWeirdStuff(array1, array2){
let list = []
let sum = 0
for (let i = 0; i < Math.max(array1.length, array2.length); i ){
list.push(sum = array1[i])
sum = array2[i]
} return sum
}
console.log(addingAllTheWeirdStuff([1, 3, 5], [2, 4, 6])); // expected log [11, 13, 15]
Ответ №1:
- Вы можете получить сумму массива с помощью
Array.reduce
функции. - И может добавить сумму к каждому элементу массива 2 с помощью
Array.map
функции.
function addingAllTheWeirdStuff(array1, array2){
const sum = array1.reduce((sum, cur) => sum cur, 0);
return array2.map(item => item sum);
}
console.log(addingAllTheWeirdStuff([1, 3, 5], [2, 4, 6]));
Комментарии:
1. Вам не хватает 2-го аргумента для
reduce()
2. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… — Если не указано начальное значение, первый элемент в массиве будет использоваться в качестве начального значения накопителя и пропущен как currentValue
3. Вы должны использовать начальное значение
0
в случае, если массив пуст.4. Спасибо. @Barmar пропустил об этом.
Ответ №2:
Вам нужны два отдельных цикла. Один цикл вычисляет сумму array1
. Второй цикл добавляет это к каждому элементу array2
.
Вы не можете комбинировать циклы, потому что вам нужно, чтобы вся сумма первого массива добавлялась к первому элементу второго массива. Ваш код просто добавляет текущее значение текущего итога, а не итоговый итог. Это также добавление элементов обоих массивов sum
, а не добавление sum
к элементам второго массива.
Кроме того, вы возвращаете сумму, а не новый массив.
function addingAllTheWeirdStuff(array1, array2) {
let sum = 0;
for (let i = 0; i < array1.length; i ) {
sum = array1[i];
}
return array2.map(el => el sum);
}
console.log(addingAllTheWeirdStuff([1, 3, 5], [2, 4, 6])); // expected log [11, 13, 15]
Ответ №3:
В вашем коде есть логическая проблема. Причина, по которой ваш код ведет себя неправильно, заключается в том, что вы пытаетесь выполнить в одном цикле for два действия, которые должны выполняться в разных циклах. Я попытаюсь объяснить это непосредственно с помощью кода:
// ЧТО ВЫ ДОЛЖНЫ СДЕЛАТЬ:
function addingAllTheWeirdStuff(array1, array2){
let sum = 0;
//First compute the sum of the first array
for (let i = 0; i < array1.length; i ){
sum = array1[i]; //this is equivalent to sum=sum array[i]
}
//Then add the sum to each element of array 2:
for (let i = 0; i < array1.length; i ){
array2[i] =sum;
}
//Finally, return the updated array
return array2;
}
console.log(addingAllTheWeirdStuff([1, 3, 5], [2, 4, 6])); // expected log [11, 13, 15]
// ЧТО ВЫ СДЕЛАЛИ:
function addingAllTheWeirdStuff(array1, array2){
let list = []
let sum = 0
//if array1.lenght!==array2.lenght this cycle will cause problems
for (let i = 0; i < Math.max(array1.length, array2.length); i ){
//at each cycle of the for you are saving the value of sum
//in list. It's not useful to compute sum.
list.push(sum = array1[i])
//Here you are doing: sum = sum array2[i];
//and not array2[i]=array2[i] sum;
//furthermore this should be done in a different for cycle
sum = array2[i]
} return sum
}
console.log(addingAllTheWeirdStuff([1, 3, 5], [2, 4, 6])); // expected log [11, 13, 15]
Ответ №4:
function addingAllTheWeirdStuff(array1, array2) {
if(array1 == null || array2 == null) return;
const sumArray1 = array1.reduce((list, value) => list value);
return array2.map(value => value sumArray1);
}
console.log(addingAllTheWeirdStuff([1, 3, 5], [2, 4, 6])); // expected log [11, 13, 15]
Ответ №5:
Я думаю, это вам поможет.
function addingAllTheWeirdStuff(array1, array2) {
//firt get total of first array with reduce function
const total = array1.reduce((accumulator, item) => {
return accumulator item;
}, 0)
const list = []
//then add total to second function with map function.
array2.map((e) => list.push(e total))
return list
}
console.log(addingAllTheWeirdStuff([1, 3, 5], [2, 4, 6])); // expected log [11, 13, 15]