如何计算对象数组中的数字

时间:2019-08-17 08:49:07

标签: javascript arrays reactjs object

我有一个obj数组,其中有些麻木,我想找到和。我知道如何通过一个简单的数组来实现这一点,但在这种情况下,似乎令人困惑。

我试图像平常一样在数组中使用reduce,但是没有用。

Future<int>GetRows(String Username,String Password) async{
  var dbClient = await db;

  var result = await dbClient.rawQuery("SELECT COUNT(*) FROM $Table WHERE $CoulmnUserName = $Username AND $CoulmnPassword = $Password");

  return result.length;
}

例如,我知道我可以做到:

    const arr = [{ some: 1 }, { some: 2 }, { some: 3 }]

    const sumArr = arr.reduce((a, b) => a.some + b.some, 0)

    console.log(sumArr)

如果我有一个像 const arr = [1, 2, 3, 4, 5] const sumArr = arr.reduce((a, b) => a + b, 0) console.log(sumArr) 这样的数组,我想为所有[{a: 1}, {a: 2}, {a: 3}, {b: 4}, {b: 5}]找到sum,并为所有a做同样的事情。

3 个答案:

答案 0 :(得分:1)

a(累加器)没有some属性,它是一个原始值,不是对象,因此您只需要以a的身份访问,而b代表当前循环中的对象,它是一个对象,因此您需要使用key

访问值

const arr = [{ some: 1 }, { some: 2 }, { some: 3 }]
const sumArr = arr.reduce((a, b) => a + b.some, 0)

console.log(sumArr)

答案 1 :(得分:1)

您的a累加器。它以0开头,听起来像您希望每次迭代都将其变成一个数字,以便最后,整个reduce解析为一个数字。

改为使用(a, b) => a + b.some

const arr = [{ some: 1 }, { some: 2 }, { some: 3 }]

const sumArr = arr.reduce((a, b) => a + b.some, 0)

console.log(sumArr)

答案 2 :(得分:1)

其他答案解释了您的方法中的reducer问题。现在,对于问题的第二部分:您可以简化为一个对象,其中包含数组内对象中不同键的总和。换句话说,将累加器更改为对象并更改reducer-lambda。类似的东西(下面是jsfiddle的代码):

const raw = [{a: 1}, {a: 2}, {a: 3}, {b: 4}, {b: 5}];

const calcSums = someArray => someArray
  .reduce( (sums, val) => {
    Object.keys(val)
      .forEach( v => 
          sums[`sum-${v}`] = !sums[`sum-${v}`] ? val[v] : sums[`sum-${v}`] + val[v] );
    return sums;
  }, {} );


console.log(calcSums(raw));

// the method is generic, so this works too (as long as the values are numbers)
const raw2 = [{a: 1, b:3, c:7}, {a: 2}, {a: 3}, {b: 4}, {b: 5}, {c: 9}];
console.log(calcSums(raw2));