当数组中对象的最大值显示为两个最大值时,显示该对象的最大值



我有一个来自 api 响应及其对象的数组。我需要找到具有最大总数的值,并且我显示它,当总数有两个最大值时,我无法解决它。有什么解决办法吗?

myArray[
{time: "2018-12-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-13-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-14-02", total: 35, percentage: 25, averageTime: 25},
{time: "2018-16-02", total: 65, percentage: 60, averageTime: 20},
{time: "2018-17-02", total: 40, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 65, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 35, percentage: 23, averageTime: 20}
];

我尝试了这样的reduce函数:

var data =[];
data.reduce((max, p) => p.total > max ? p.total : max, data[0].total);

你可以做这样的事情:

想法:

  • 创建一个哈希映射,total作为键和一个变量来保存最大值。
  • 检查密钥是否存在,如果不存在,则将其初始化为数组。
  • 推送此数组中的当前对象。
  • 获取带有键的数组作为max,您将获得最大总数的所有值。

现在您已经有了整个对象,您可以迭代并显示任何必要的值。

var myArray = [{time: "2018-12-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-13-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-14-02", total: 35, percentage: 25, averageTime: 25},
{time: "2018-16-02", total: 65, percentage: 60, averageTime: 20},
{time: "2018-17-02", total: 40, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 65, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 35, percentage: 23, averageTime: 20}]
var max = 0;
var hashMap = myArray.reduce((acc, p) => {
  max = Math.max(max, p.total);
  acc[p.total] = acc[p.total] || [];
  acc[p.total].push(p);
  return acc;
}, {});
console.log(hashMap[max]);

只有时间值

var myArray = [{time: "2018-12-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-13-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-14-02", total: 35, percentage: 25, averageTime: 25},
{time: "2018-16-02", total: 65, percentage: 60, averageTime: 20},
{time: "2018-17-02", total: 40, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 65, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 35, percentage: 23, averageTime: 20}]
var max = 0;
var hashMap = myArray.reduce((acc, p) => {
  max = Math.max(max, p.total);
  acc[p.total] = acc[p.total] || [];
  acc[p.total].push(p.time);
  return acc;
}, {});
console.log(hashMap[max]);

您可以使用

Math.max以及spreadarray.prototype.map

var myArray = [
{time: "2018-12-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-13-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-14-02", total: 35, percentage: 25, averageTime: 25},
{time: "2018-16-02", total: 65, percentage: 60, averageTime: 20},
{time: "2018-17-02", total: 40, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 65, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 35, percentage: 23, averageTime: 20}
];
var max = Math.max(...myArray.map(e => e.total));
console.log(max);

您可以在数组中找到最大"总计"值,然后找到具有该最大值的数组的所有元素。

var myArray = [
{time: "2018-12-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-13-02", total: 25, percentage: 20, averageTime: 20},
{time: "2018-14-02", total: 35, percentage: 25, averageTime: 25},
{time: "2018-16-02", total: 65, percentage: 60, averageTime: 20},
{time: "2018-17-02", total: 40, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 65, percentage: 20, averageTime: 20},
{time: "2018-18-02", total: 35, percentage: 23, averageTime: 20}
];
var max = Math.max(...myArray.map(e => e.total));
var time = myArray.filter(item => item.total == max);
console.log(time);

一种可能的方法:

function getMaxValue(myArray) {
    var totals = myArray.map(x => x.total);
    var max = filter(x => x == Math.max(totals));
    return max.length == 1 ? max[0] : 'unable to solve it';
}

最新更新