Как накапливать и суммировать значения из двух массивов? - PullRequest
0 голосов
/ 24 января 2019

У меня есть 2 массива (массив 2 многомерный), которые выглядят так:

Array 1 = 
 [1795, 3449, 41, 1261, 99, 38162, 36, 7, 2768, 53, 1800]

Array 2 = 
 [[33, 0, 0, 433, 17, 2388, 0, 0, 0, 0, 0],
 [508, 0, 0, 242, 36, 800,  0, 0, 5, 0, 0],
 [285, 0, 0, 0,   0,  1600, 0, 0, 0, 0, 0], 
 [0,   0, 0, 0,   0,  1700, 0, 0, 0, 0, 0], 
 [0,   0, 0, 0,   0,  0,    0, 0, 0, 0, 0]]

Массивы всегда будут одинаковой длины.

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

[[1795, 3449, 41, 1261, 99,  38162, 36, 7, 2768]
[1828, 3449, 41, 1694, 116, 40550, 36, 7, 2768]
[2336, 3449, 41, 1936, 152, 41350, 36, 7, 2773]
[2621, 3449, 41, 1936, 152, 42950, 36, 7, 2773]
[2621, 3449, 41, 1936, 152, 44650, 36, 7, 2773]
[2621, 3449, 41, 1936, 152, 44650, 36, 7, 2773]]

Конечный массив будет принимать значение из строки выше и накапливать значение вниз.

Я пробовалиспользуя map и Reduce, но я думаю, что массив 2 является многомерным и что я все еще новичок в JS, я не могу заставить его работать.Любая помощь будет оценена.

Это то, что я уже пробовал:

var yearSums = array1.map(function (array1Map) {
    return [parseInt(array1Map) + parseInt(array2)]
})

Это дает мне следующее:

[1828.0, 3482.0, 74.0, 1294.0, 132.0, 38195.0, 69.0, 40.0, 2801.0, 86.0, 1833.0]

Что он делает, это добавляет первый элемент в массив 2 (33) к каждому значению в массиве 1.

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Использование первого массива (назовем его acc) в качестве аккумулятора при отображении вложенного массива (table) во вложенном виде:

 const result = table.map(row => row.map((value, index) => acc[index] += value));

Это приведет к изменению первого массива, хотя,клонируйте его, если вам нужна неизменность.

0 голосов
/ 25 января 2019

Мы также можем использовать Array.reduce для достижения того же результата.

var arr1 = [1795, 3449, 41, 1261, 99, 38162, 36, 7, 2768, 53, 1800];
var arr2 = [
  [33, 0, 0, 433, 17, 2388, 0, 0, 0, 0, 0],
  [508, 0, 0, 242, 36, 800, 0, 0, 5, 0, 0],
  [285, 0, 0, 0, 0, 1600, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 1700, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
];
var sumArr = arr2.reduce(
  function(acc, curr) {
    acc.push(
      acc[acc.length - 1].map(function(col, idx) {
        return col + curr[idx];
      })
    );
    return acc;
  },
  [arr1] //Initialize Array1 as a 2D array.
);
console.log(sumArr);
0 голосов
/ 24 января 2019

Работает только с массивами одинаковой длины.

Вы должны выполнить цикл внутри каждого массива, чтобы каждый индекс массива получил значение и суммировал их.

ОБНОВЛЕНИЕ

Не получилось то, что вы ожидали в первый раз.обновленный скрипт

var array1 = 
 [1795, 3449, 41, 1261, 99, 38162, 36, 7, 2768, 53, 1800]

var array2 = 
 [[33, 0, 0, 433, 17, 2388, 0, 0, 0, 0, 0],
 [508, 0, 0, 242, 36, 800,  0, 0, 5, 0, 0],
 [285, 0, 0, 0,   0,  1600, 0, 0, 0, 0, 0], 
 [0,   0, 0, 0,   0,  1700, 0, 0, 0, 0, 0], 
 [0,   0, 0, 0,   0,  0,    0, 0, 0, 0, 0]]

var summedArray = array2.map(arr => arr.map((subArr,i) => subArr +array1[i])) 

console.log(summedArray)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...