【问题标题】:Compute sum of numerical values of an array of arrays in JavaScript在 JavaScript 中计算数组数组的数值总和
【发布时间】:2018-08-05 22:19:03
【问题描述】:

有这个输入:

myArray = [[32.4, "bla", 1.44, 0.5, 65.8, "abc"],
           [654, "ert"]
           [9.4, "a", 1.44, "abc"]];

一个数组数组,我想计算每个子数组的总和,同时忽略字符串值。

我知道对于这种类型的单个数组,总和可以计算为:

sum = myArray.filter(n => !isNaN(n)).reduce((m, n) => m + n);

但是当我尝试对矩阵使用相同的方法时,结果是0

有什么建议吗?

【问题讨论】:

  • "但是当我尝试对矩阵使用相同的方法时..." 向我们展示您的尝试。我的意思是,您肯定不只是使用相同的代码,因为数据的结构完全不同。所以……?
  • 您在第二行末尾缺少,。 (这不是语法错误,因为这意味着后续数组将被视为属性访问器。但这是不正确的。:-))

标签: javascript arrays


【解决方案1】:

由于您现在正在处理一个数组数组,您可以应用相同的代码,但它必须在外部 reduce 内才能循环通过外部数组:

const sum = myArray.reduce(
    (s, arr) => s + arr.filter(n => !isNaN(n)).reduce((m, n) => m + n),
    0
);

现场示例:

const myArray = [
  [32.4, "bla", 1.44, 0.5, 65.8, "abc"],
  [654, "ert"],
  [9.4, "a", 1.44, "abc"]
];

const sum = myArray.reduce((s, arr) =>  s + arr.filter(n => !isNaN(n)).reduce((m, n) => m + n), 0);

console.log(sum);

【讨论】:

    【解决方案2】:

    您可以使用map 方法和内部filter 仅获取数字数组,然后使用reduce 获取每个数组的总和。

    const myArray = [
      [32.4, "bla", 1.44, 0.5, 65.8, "abc"],
      [654, "ert"],
      [9.4, "a", 1.44, "abc"]
    ];
    
    const result = myArray.map(arr => {
      return arr
        .filter(Number)
        .reduce((r, e) => r + e)
    })
    
    console.log(result)

    【讨论】:

      【解决方案3】:

      您可以尝试将值转换为带有unary plus + 的数字或取零进行添加。

      var array = [[32.4, "bla", 1.44, 0.5, 65.8, "abc"], [654, "ert"], [9.4, "a", 1.44, "abc"]],
          result = array.map(a => a.reduce((s, v) => s + (+v || 0), 0));
          
      console.log(result);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-10
        • 1970-01-01
        • 2017-08-21
        • 2012-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多