Как мне добавить сумму массива 1 к каждому элементу в массиве 2

#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]