[英]How to group by day and find min and max value in an array of object?
I have an array of object like that: 我有一个像这样的对象数组:
0:
name: "Temp"
series: Array(505)
[0 … 99]
0: {name: "2019-6-29 7:00:00 PM", value: 30.8}
1: {name: "2019-6-29 8:00:00 PM", value: 29.67}
2: {name: "2019-6-29 9:00:00 PM", value: 28.68}
3: {name: "2019-6-29 10:00:00 PM", value: 27.83}
4: {name: "2019-6-29 11:00:00 PM", value: 26.28}
5: {name: "2019-6-30 12:00:00 AM", value: 25.29}
6: {name: "2019-6-30 1:00:00 AM", value: 24.72}
7: {name: "2019-6-30 2:00:00 AM", value: 24.16}
8: {name: "2019-6-30 3:00:00 AM", value: 24.16}
9: {name: "2019-6-30 4:00:00 AM", value: 24.02}
10: {name: "2019-6-30 5:00:00 AM", value: 23.03}
11: {name: "2019-6-30 6:00:00 AM", value: 23.31}
12: {name: "2019-6-30 7:00:00 AM", value: 23.03}
13: {name: "2019-6-30 8:00:00 AM", value: 22.89}
14: {name: "2019-6-30 9:00:00 AM", value: 23.03}
15: {name: "2019-6-30 10:00:00 AM", value: 23.73}
16: {name: "2019-6-30 11:00:00 AM", value: 25.01}
17: {name: "2019-6-30 12:00:00 PM", value: 24.86}
18: {name: "2019-6-30 1:00:00 PM", value: 31.5}
19: {name: "2019-6-30 2:00:00 PM", value: 40.83}
20: {name: "2019-6-30 3:00:00 PM", value: 33.62}
21: {name: "2019-6-30 4:00:00 PM", value: 28.39}
22: {name: "2019-6-30 5:00:00 PM", value: 29.38}
23: {name: "2019-6-30 6:00:00 PM", value: 28.11}
24: {name: "2019-6-30 7:00:00 PM", value: 27.27}
25: {name: "2019-6-30 8:00:00 PM", value: 26.14}
26: {name: "2019-6-30 9:00:00 PM", value: 25.15}
27: {name: "2019-6-30 10:00:00 PM", value: 24.44}
28: {name: "2019-6-30 11:00:00 PM", value: 24.16}
How can I use these data to have a new array of object like that: 我如何使用这些数据来创建一个新的对象数组,如下所示:
0: {name: "2019-6-29", min: minValueForThatDay, max: maxValueForThatDay}
1: {name: "2019-6-30", min: minValueForThatDay, max: maxValueForThatDay}
I already tried with reduce and map, but with no luck yet 我已经尝试过reduce和map,但是还没有运气
You can use reduce 您可以使用减少
let data = [{name: "2019-6-29 7:00:00 PM", value: 30.8}, {name: "2019-6-29 8:00:00 PM", value: 29.67},{name: "2019-6-29 9:00:00 PM", value: 28.68},{name: "2019-6-29 10:00:00 PM", value: 27.83},{name: "2019-6-29 11:00:00 PM", value: 26.28},{name: "2019-6-30 12:00:00 AM", value: 25.29},{name: "2019-6-30 1:00:00 AM", value: 24.72},{name: "2019-6-30 2:00:00 AM", value: 24.16},{name: "2019-6-30 3:00:00 AM", value: 24.16},{name: "2019-6-30 4:00:00 AM", value: 24.02},{name: "2019-6-30 5:00:00 AM", value: 23.03},{name: "2019-6-30 6:00:00 AM", value: 23.31},{name: "2019-6-30 7:00:00 AM", value: 23.03},{name: "2019-6-30 8:00:00 AM", value: 22.89},{name: "2019-6-30 9:00:00 AM", value: 23.03},{name: "2019-6-30 10:00:00 AM", value: 23.73}] let final = data.reduce((op,{name, value}) => { let [date] = name.split(' ',1) op[date] = op[date] || {name, min: Infinity, max: -Infinity} op[date].min = op[date].min > value ? value : op[date].min op[date].max = op[date].max < value ? value : op[date].max return op },{}) console.log(Object.values(final))
try this: 尝试这个:
const data = [{name: "2019-6-29 7:00:00 PM", value: 30.8}, {name: "2019-6-29 8:00:00 PM", value: 29.67}, {name: "2019-6-29 9:00:00 PM", value: 28.68}, {name: "2019-6-29 10:00:00 PM", value: 27.83}, {name: "2019-6-29 11:00:00 PM", value: 26.28}, {name: "2019-6-30 12:00:00 AM", value: 25.29}, {name: "2019-6-30 1:00:00 AM", value: 24.72}, {name: "2019-6-30 2:00:00 AM", value: 24.16}, {name: "2019-6-30 3:00:00 AM", value: 24.16}, {name: "2019-6-30 4:00:00 AM", value: 24.02}, {name: "2019-6-30 5:00:00 AM", value: 23.03}, {name: "2019-6-30 6:00:00 AM", value: 23.31}, {name: "2019-6-30 7:00:00 AM", value: 23.03}, {name: "2019-6-30 8:00:00 AM", value: 22.89}, {name: "2019-6-30 9:00:00 AM", value: 23.03}, {name: "2019-6-30 10:00:00 AM", value: 23.73}] const groupBy = (arr) => arr.reduce((acc, ele)=>( (acc[ele.name.split(' ')[0]] = acc[ele.name.split(' ')[0]] || []).push(ele), acc),{}) const max = (arr) => Math.max(...arr.map(res=>res.value)) const min = (arr) => Math.min(...arr.map(res=>res.value)) const result = Object.entries(groupBy(data)).map(([key, val])=> ({name:key, min:min(val), max: max(val)})) console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.