Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js我的数组对象项计数_Javascript_Mysql_Node.js - Fatal编程技术网

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

Javascript Node.js我的数组对象项计数,javascript,mysql,node.js,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},

我有一个应用程序,我需要数一数我的门。例如:

  • 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},
]
数值将为[60,70], 对于每个门(1和2),获取元素门为门的a的所有元素,然后加入这些元素人员值并将其映射回数组。因此,每个门都被其参考值所取代

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

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

{
1:60,
2:70
}
var a=[
{门:1,人:20},
{门:2,人:20},
{门:1,人:10},
{门:1,人:20},
{门:2,人:50},
];
var和={};

对于(var i=0;i这是一个很好的例子,说明何时可以一起使用and:

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

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

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

[20, 20, 10, 20, 50]
然后我们在该数组上调用
reduce()
,它将数字累加在一起

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

let total = a.map(o => o.people).reduce((a,b) => a + b);
现在只需要console.log(结果)

或者,您甚至可以使用一些语法糖来增强代码,如:

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

我不知道你想要的结果格式,但如果一个对象是好的,并且考虑到你事先不知道你的门,使用它就足够了

var a=[
{门:1,人:20},
{门:2,人:20},
{门:1,人:10},
{门:1,人:20},
{门:2,人:50},
]
var结果=a.reduce((累加器,当前值)=>{
如果(!累加器[currentValue.door]){
//第一次找到门时设置属性
累加器[当前值.门]=0;
}
//每次迭代中每个门的总人数
累加器[currentValue.door]+=currentValue.people;
回流蓄能器;
}, {});
console.log(结果)
let total = a.map(o => o.people).reduce((a,b) => a + b);
var array = [
{door: 1 , people: 20},
{door: 2 , people: 20},
{door: 1 , people: 10},
{door: 1 , people: 20},
{door: 2 , people: 50},
]

var res = [];

array.forEach(function(element) {
var e = res.find(function(data) {
    return data.door == element.door;
});

if(e) {
  element.people  =  e.people + element.people;
} else {
 res.push({
   door: element.door,
   people: element.people
 });
}   
});
var result = {}    
a.map(i => result[i.door] = (result[i.door] || 0) + i.people)
var result = {}    
    a.map({door, people} => result[i.door] = (result[door] || 0) + people)