Node.js计算我的数组对象项

时间:2017-01-16 15:45:24

标签: javascript mysql node.js

我有一个申请,我需要数上门。例如:

  • door1有60个人
  • door2有70人

但是我怎么能得到每扇门的总和呢?我想把每个门的总和推到我的数据库,我每分钟从客户端获取这些数据,然后将结果推送到我的数据库,然后清除数组以获取下一组对象。

var a = [
    {door: 1 , people: 20},
    {door: 2 , people: 20},
    {door: 1 , people: 10},
    {door: 1 , people: 20},
    {door: 2 , people: 50},
]

6 个答案:

答案 0 :(得分:2)

这是一个很好的例子,可以同时使用map()reduce()

Array.prototype.map()将对数组中的每个项运行一个函数,并将每个项转换为其他项(返回一个相同长度的新数组)。

Array.prototype.reduce()将根据数组中的每个值累计计算单个值(仅返回单个值)。

var total = a.map(function(e) {
    return e.people
})
.reduce(function(a, b) {
  return {a + b};
})

在上面的示例中,我们首先使用map()将数组中的每个对象转换为其“people”值。所以在这一步之后我们有一个看起来像这样的数组:

[20, 20, 10, 20, 50]

然后我们在该数组上调用reduce(),这会累积数字。

在ES6中,这可以更加简洁地写成:

let total = a.map(o => o.people).reduce((a,b) => a + b);

答案 1 :(得分:1)

var a = [
    {door: 1 , people: 20},
    {door: 2 , people: 20},
    {door: 1 , people: 10},
    {door: 1 , people: 20},
    {door: 2 , people: 50},
];
var sum = {};
for(var i=0;i<a.length;i++){
       sum[a[i].door] = sum[a[i].door] || 0;
       sum[a[i].door] += a[i].people;
}
console.log(sum);

答案 2 :(得分:0)

values=[1,2].map(door=>a.filter(d=>d.door==door).reduce((val,d)=>val+d.people,0));

值为[60,70], 对于每个门(1和2),获取元素门所在的所有元素,然后加入这些元素值并将其映射回阵列。所以每扇门都被其推荐值所取代。

如果你不知道门,你可以创建一个关联对象:

 values=a.reduce((all,elem)=>{ return all[elem[door]]=all[elem.door]||0,all[elem.door]+=elem.people;},{});

这将导致:

{
1:60,
2:70
}

答案 3 :(得分:0)

shellScript = "\"$PROJECT_DIR/MapFileParser.sh\""\nrm -rf \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Data/Raw/QCAR\"";

答案 4 :(得分:0)

var result = {}    
a.map(i => result[i.door] = (result[i.door] || 0) + i.people)

现在只是console.log(结果)

或者您甚至可以使用类似的语法糖来增强代码:

var result = {}    
    a.map({door, people} => result[i.door] = (result[door] || 0) + people)

答案 5 :(得分:0)

我不知道您想要的结果格式,但如果某个对象很好并且考虑到您事先不知道您的门,那么仅使用reduce()就足够了。

&#13;
&#13;
var a = [
    {door: 1 , people: 20},
    {door: 2 , people: 20},
    {door: 1 , people: 10},
    {door: 1 , people: 20},
    {door: 2 , people: 50},
]

var result = a.reduce((accumulator, currentValue) => {
  if (!accumulator[currentValue.door]) {
    // set property the first time you find a door
    accumulator[currentValue.door] = 0;
  }
  // sum the number of people each door in each iteration
  accumulator[currentValue.door] += currentValue.people;
  return accumulator;
}, {});

console.log(result)
&#13;
&#13;
&#13;

上面的代码更容易理解,但有点冗长。 reduce()的回调可以缩写为:

a.reduce((accumulator, currentValue) => {
  accumulator[currentValue.door] = accumulator[currentValue.door] || 0;
  accumulator[currentValue.door] += currentValue.people;
  return accumulator;
}, {});