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)