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

Я пытаюсь решить уравнение, в котором я добавляю числа из списка массивов, следующих за индексами.

Каждый массив списка представляет собой случайно сгенерированный массив фиксированной длины из 4 чисел, например:

const list = [
  [2, 9, 1, 2],
  [2, 3, 9, 4],
  [4, 7, 8, 1]
]

Итак, я пытаюсь получить сумму каждого числа каждогоиндекс из каждого массива.Вот так:

const list = [
  [2, 9, 1, 2],
  [2, 3, 9, 4],
  [4, 7, 8, 1]
]

// expectedResult = [8, 19, 18, 7];

Как мне этого добиться?

Ответы [ 6 ]

0 голосов
/ 15 февраля 2019

const list = [
  [2, 9, 1, 2],
  [2, 3, 9, 4],
  [4, 7, 8, 1]
];

let result = list.reduce( (a,b) => a.map( (c,i) => c + b[i] ));

console.log(result);

Обновление: объяснение было запрошено для.

Прежде всего уменьшение даст массив (массивов) и хотите уменьшить до одного значения (массив).Для этого он будет вызывать функцию первой стрелки 2 раза.В первый раз a будет [2,9,1,2] , а b будет [2,3,9,4] .При a и b функция первой стрелки вернет map из a .Если a является массивом, он вернет массив, в котором каждый элемент добавлен к соответствующему элементу массива b .Результат этой первой карты будет [4,12,10,6] . уменьшение теперь будет вызывать функцию первой стрелки во второй раз с a (первый результат карты) [4,12,10,6] и b (последний элемент массива ввода [4,7,8,1] ).Эта функция стрелки будет делать то же самое, что и раньше: возвращать массив, в котором каждый элемент a добавляется к соответствующему элементу b . карта вернет [8,19,18,7] .Поскольку больше нет входных элементов, lower вернет это значение (массив).

0 голосов
/ 15 февраля 2019

Вы можете использовать .reduce в сочетании с итеративным циклом for...of, который извлекает индекс и значение каждого внутреннего массива, используя v.entries.Затем просто присвойте их по индексу массиву аккумулятора и сложите их вместе.

let expectedResult = list.reduce((a,v) => {
 for(let [i, n] of v.entries()) a[i] = (a[i] || 0) + n
 return a;
}, []);

const list = [
  [2, 9, 1, 2],
  [2, 3, 9, 4],
  [4, 7, 8, 1]
]

let expectedResult = list.reduce((a,v) => {
 for(let [i, n] of v.entries()) a[i] = (a[i] || 0) + n
 return a;
}, []);

console.log(expectedResult);
0 голосов
/ 15 февраля 2019

Это еще один подход, который использует map () над первым массивом, вложенным с помощью redu () , который сгенерировал сумму соответствующего столбца.

const list = [
  [2, 9, 1, 2],
  [2, 3, 9, 4],
  [4, 7, 8, 1]
];

let sums = list[0].map(
    (x, idx) => list.reduce((sum, curr) => sum + curr[idx], 0)
);

console.log(sums);
0 голосов
/ 15 февраля 2019

Вы можете использовать уменьшить и forEach .

Здесь мы создаем массив с индексом, который мы добавляемэлемент к определенному индексу.и чем просто взять значения из объекта.

const list = [[2, 9, 1, 2],[2, 3, 9, 4],[4, 7, 8, 1]]

let op = list.reduce((op,inp)=>{
   inp.forEach((e,i)=>op[i] = op[i] ? op[i]+e : e)
   return op
},[])

console.log(op)
0 голосов
/ 15 февраля 2019

Для достижения ожидаемого результата используйте опцию ниже, используя два цикла с forEach

const blockList = [[2, 9, 1, 2], [2, 3, 9, 4], [4, 7, 8, 1]];
const result = [];

blockList.forEach((v, index) =>
  v.forEach((val, i) => {
    result[i] = result[i] ? result[i] : 0;
    result[i] += val;
  })
);

console.log(result);

codepen - https://codepen.io/nagasai/pen/yZRrKy?editors=1010

0 голосов
/ 15 февраля 2019

Использовать вложенные циклы:

const blocklist = [[2,9,1,2], [2,3,9,4], [4,7,8,1]], calculatedBlocks = [];
for (let j = 0, sum = 0; j < blocklist[0].length; j++, sum = 0) {
  for (let i = 0; i < blocklist.length; i++) sum += blocklist[i][j];
  calculatedBlocks.push(sum);
}

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