在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方法,但找不到合适的方法。
答案 0 :(得分:2)
首先,您必须使用date
结构按hash
字段对数组进行分组。
然后,您只需将Math.max方法与spread syntax结合使用即可达到您的要求。
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)));

答案 1 :(得分:2)
您可以使用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);
答案 2 :(得分:0)
这个答案是使用时刻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()