我是javascript的新手,今天我遇到了问题。事实是,每天每小时都有一大群人参观(如你所见)。我想找出一天中最热门的时段。我的计划是创建一个地图,其中key是小时索引(0,1,2,3,4,5 ......),value是在该小时的所有日期访问过的所有人的总和。问题是我无法用我的JS知识做到这一点。有人可以给我一个方向来解决这个问题吗?非常感谢你。
[
{date: "25.05.2018",
value: {
1: 209
2: 123
3: 890
.
.
24: 789
}
},
{date: "26.05.2018",
value: {
1: 280
2: 398
3: 450
.
.
24: 76
}
}
]
我的JAVA解决方案:
const { data: { data: [{ values }] } } = insightsData;
const timesMap = new Map();
values.forEach(item => {
Object.entries(item.value).forEach(([key, value]) => {
const timeValue = timesMap.get(key);
if (timeValue) {
timesMap.set(key, timeValue + value);
} else {
timesMap.set(key, value);
}
});
});
答案 0 :(得分:0)
如果您的数组长度相同,则可以将Array#reduce
与Array#map
一起使用。
reduce
将数组作为累加器r
,如果累加器中不存在项,则使用值为零的logical OR ||
。
var counts = [{ date: "26.05.2018", value: [125, 100, 200] }, { date: "27.05.2018", value: [5, 6, 7] }, { date: "28.05.2018", value: [3, 4, 5] }],
result = counts.reduce(
(r, { value }) => value.map((v, i) => (r[i] || 0) + v),
[]
);
console.log(result);

将对象作为value
属性。
var counts = [{ date: "26.05.2018", value: { 0: 125, 1: 100, 2: 200 } }, { date: "27.05.2018", value: { 0: 5, 1: 6, 2: 7 } }, { date: "28.05.2018", value: { 0: 3, 1: 4, 2: 5 } }],
result = counts.reduce(
(r, { value }) => Object
.entries(value)
.reduce((s, [k, v]) => {
s[k] = (s[k] || 0) + v;
return s;
}, r),
{}
);
console.log(result);

答案 1 :(得分:-1)
您可以对值进行迭代,并将它们添加到sum,就像这样
const data = {date: "26.05.2018",
value: [
125,
100,
200,
]
}
let sum = 0;
Object.values(data.value).forEach(elem => sum = sum + elem)
console.log(sum)