【问题标题】:Sequential addition of nested arrays in JavaScriptJavaScript中嵌套数组的顺序添加
【发布时间】:2020-03-28 22:46:29
【问题描述】:

我正在尝试在 javascript 中添加 4 个具有 9 个数值的嵌套数组并遇到问题。它们当前的存储方式如下:x = [[Array1(9)], [Array2(9)], [Array3(9)], [Array4(9)]]

我想将它们“压缩”在一起并在过程中添加,因此将 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() 函数来按照我想要的方式将它们组合在一起。任何帮助将不胜感激。

谢谢,

【问题讨论】:

  • 如果您找到任何答案,请将其标记为正确,以便有类似问题的用户知道答案

标签: javascript arrays multidimensional-array map-function array.prototype.map


【解决方案1】:

您可以使用Array.prototype.reduce() 遍历您的外部数组,并使用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%;}

【讨论】:

    【解决方案2】:

    为每个用于外部和内部数组

    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】:

      使用第一个数组进行映射,将其他 3 个数组中的对应值添加到每个值。您可以为任意长度的数组创建一个函数(参见 sn-p 中的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; }

      【讨论】:

      • 如果有很多内部数组你不能写 arrays[1][i],arrays[2][i],arrays[3][i]........ ...等等..map里面应该有innerloop来迭代arrays.length次...想法?
      猜你喜欢
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多