我有一个申请,我需要数上门。例如:
但是我怎么能得到每扇门的总和呢?我想把每个门的总和推到我的数据库,我每分钟从客户端获取这些数据,然后将结果推送到我的数据库,然后清除数组以获取下一组对象。
var a = [
{door: 1 , people: 20},
{door: 2 , people: 20},
{door: 1 , people: 10},
{door: 1 , people: 20},
{door: 2 , people: 50},
]
答案 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()就足够了。
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;
上面的代码更容易理解,但有点冗长。 reduce()
的回调可以缩写为:
a.reduce((accumulator, currentValue) => {
accumulator[currentValue.door] = accumulator[currentValue.door] || 0;
accumulator[currentValue.door] += currentValue.people;
return accumulator;
}, {});