在 JavaScript 中顺序添加嵌套数组

Sequential addition of nested arrays in JavaScript

我试图在 javascript 中将 4 个嵌套数组与 9 个数值相加,但遇到了问题。它们当前存储为:x = [[Array1(9)], [Array2(9)], [Array3(9)], [Array4(9)]]

我想 "zip" 将它们放在一起并添加到过程中,因此将 Array1[0] 和 Array2-4[0] 添加到所有九个值中。因此,四个数组中的每一个都总结了它们的匹配 ID。 数组看起来像这样:

[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() 函数来按照我想要的方式将它们组合在一起。任何帮助将不胜感激。

谢谢,

您可以通过 Array.prototype.reduce() and loop through nested arrays one by one with 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%;}

对外部和内部数组使用 for each

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);

使用第一个数组进行映射,将其他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; }