繁体   English   中英

从对象数组获取日期的最大值

[英]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.maxObject.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM