[英]Get the max value for a date from an array of objects
在React.js组件中,我有以下数组:
const array = [{
date: '2017-12-21T07:43:00Z',
value: 7000
}, {
date: '2017-12-21T09:41:00Z',
value: 1500,
}, {
date: '2017-12-23T10:59:00Z',
value: 2000
}]
我想要得到的是特定日期的值的总和(我在项目中使用Moment)。
从那时起,我可以从列表中获取最大值,如下所示:
function getMaxValue () {
const { data } = this.props
return data.reduce((max, item) => item.value > max ? item.value : max, data[0].value)
}
通过这样做,结果是7000
而不是8500
。
我也可以使用Ramda方法,但是找不到合适的方法。
首先,您必须使用hash
结构按date
字段对数组进行分组。
然后,您只需要结合使用Math.max方法和传播语法即可满足您的要求。
const array = [{ date: '2017-12-21T07:43:00Z', value: 7000 }, { date: '2017-12-21T09:41:00Z', value: 1500, }, { date: '2017-12-23T10:59:00Z', value: 2000 }] let grouped = []; array.forEach(function (o) { let date = o.date.substring(0, 10); if (!this[date]) { this[date] = { date: date, value: 0 }; grouped.push(this[date]); } this[date].value += o.value; }, Object.create(null)); console.log(Math.max(...grouped.map(a => a.value)));
您可以使用array#reduce
对同一日期的对象的值求和。 然后将Math.max
与Object.values()
以获取最大值。
const array = [{ date: '2017-12-21T07:43:00Z', value: 7000 }, { date: '2017-12-21T09:41:00Z', value: 1500, }, { date: '2017-12-23T10:59:00Z', value: 2000 }], result = array.reduce((r, {date, value}) => { date = date.substring(0,10); r[date] = (r[date] || 0) + value; return r; },{}); const maxValue = Math.max(...Object.values(result)); console.log(maxValue);
这个答案是使用moment js的。
我用日期作为键创建一个对象,值作为那些日期的累积值。
创建对象时,我比较最大值并将其返回
const array = [{
date: '2017-12-21T07:43:00Z',
value: 7000
}, {
date: '2017-12-21T09:41:00Z',
value: 1500,
}, {
date: '2017-12-23T10:59:00Z',
value: 2000
}]
function getMaxValue(){
let res = {};
let max = Number.MIN_VALUE
array.forEach(obj => {
let key = moment(obj.date).format('YYYY-MM-DD');
res[key] = res[key]? res[key]+ obj.value: obj.value
if(res[key] > max){
max = res[key];
}
});
return max;
}
getMaxValue()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.