Последовательное добавление вложенных массивов в JavaScript - PullRequest
1 голос
/ 29 марта 2020

Я пытаюсь добавить 4 вложенных массива с 9 числовыми значениями c вместе в javascript и возникают проблемы. В настоящее время они хранятся следующим образом: x = [[Array1 (9)], [Array2 (9)], [Array3 (9)], [Array4 (9)]]

Я хотел бы «сжать» их вместе и добавьте в процесс, добавив Array1 [0] с Array2-4 [0] ко всем девяти значениям. Таким образом, каждый из четырех массивов суммирует свои совпадающие идентификаторы. Массивы выглядят так:

[1, 2, 4, 3,6, 1,05, 4,65, 1,95, 0,5, 2,5]

[0,432, 0,602, 1,29, 1,146, 0,558, 1,43, 0,686 , 0.178, 1.024]

перевод на:

[1.432, 2.602, т. Д.]]

Не получается получить функцию x.map () собрать их так, как я хочу. Любая помощь будет оценена.

Спасибо,

Ответы [ 3 ]

2 голосов
/ 29 марта 2020

Вы можете перемещаться по внешнему массиву с помощью Array.prototype.reduce() и l oop через вложенные массивы один за другим с помощью Array.prototype.forEach(), добавляя элементы вложенного массива к соответствующему элементу результирующего массив:

const src = [[1, 2, 4, 3.6, 1.05, 4.65, 1.95, 0.5, 2.5], [0.432, 0.602, 1.29, 1.146, 0.558, 1.43, 0.686, 0.178, 1.024]]
      
      result = src.reduce((r,a) => (a.forEach((n,j) => r[j] = (r[j]||0)+n), r),[])
      
console.log(result)
.as-console-wrapper{min-height:100%;}
1 голос
/ 29 марта 2020

Используйте первый массив для отображения, добавьте к каждому значению соответствующие значения из 3 других массивов. Вы можете создать для него функцию для массивов произвольной длины (см. sumArrays во фрагменте)

const arrays = getData();
let sums = arrays[0].map( (v, i) => v + arrays[1][i] + arrays[2][i] + arrays[3][i] );
let sums2 = sumArrays(arrays);

console.log(sums);
console.log(sums2);

function sumArrays(arrays) {
 const checkLengthEquality = () => {
  let cando = arrays.map(v => v.length);
  return Math.max.apply(null, cando) === Math.min.apply(null, cando);
 };

 if (!checkLengthEquality()) {
  throw Error("Arrays not of equal length");
 }
 
 const sum = (v, i) => {
  let len = arrays.length;
  while(len-- > 1) {
    v += arrays[len][i];
  }
  return v;
 };
 
 return arrays[0].map( (v, i) => sum(v, i) );
}

function getData() {
  return [
    [1, 2, 4, 3.6, 1.05, 4.65, 1.95, 0.5, 2.5], 
    [0.432, 0.602, 1.29, 1.146, 0.558, 1.43, 0.686, 0.178, 1.024],
    [3.1, 2, 4.3, 3.8, 1.5, 6.5, 95, 1.5, 2.5],
    [12, 1, 1.3, 8, 5.3, 6.2, 5, 1, 2.3]
  ];
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
1 голос
/ 29 марта 2020

Использование для каждого для внешнего и внутреннего массива

let arr1 =[ [1, 2, 4, 3.6, 1.05, 4.65, 1.95, 0.5, 2.5],
[0.432, 0.602, 1.29, 1.146, 0.558, 1.43, 0.686, 0.178, 1.024]]
let arr2=[];arr1.forEach( (arr)=> arr.forEach((innerArr,index)=>{
if(!arr2[index])arr2[index]=0;arr2[index]=arr2[index]+innerArr;
}));
console.log(arr2);
...