如何在多个键数组中找到最大值?

时间:2019-01-17 16:44:46

标签: javascript

我在这里有我的路由器,可从mongodb中获取值,同时检查其总和:

router.get('/bloodinventory', function(req, res) {
      Bloodinventory.aggregate([{$group: {_id : "$blood_category" , count :{$sum:"$num_stock"}}},{$sort: {_id: 1}}],function(err, inventory) {     
      res.json({ success: true, inventory: inventory });
    });  
});

然后在我的控制器中,我可以使用以下功能将其初始化为图表:

function getChart() {

    Bloodinventory.getChart().then(function(data) {
        console.log(1, data.data.inventory);
        app.inventory = data.data.inventory; 
        initChart();      
    });
}

这是我的控制台的示例输出:

[{_id: "aspheresis platelets", count: 264} 
 {_id: "cryoprecipitate",count: 330}]

我的问题是,如何获得库存数组中计数的最大值?

2 个答案:

答案 0 :(得分:1)

使用for循环跟踪变量中的最大值。

let obj = [{_id: "aspheresis platelets", count: 264},{_id: "cryoprecipitate",count: 330}]

let max = -Infinity

for( let i=0; i< obj.length; i++){
  if(obj[i].count > max) {
    max = obj[i].count; 
  } 
}
console.log(max)

Sort以降序排列。而不是0th索引元素的访问计数。

let obj = [{_id: "aspheresis platelets", count: 264},{_id: "cryoprecipitate",count: 330}]
 
let op = obj.sort((a,b)=> b.count-a.count)[0].count
 
console.log(op)

答案 1 :(得分:1)

您可以非常容易地使用数组的.reduce()函数来做到这一点,就像这样:

这个想法是要跟踪计数最高的对象,并将其与列表中的每个项目进行比较。当它遍历整个列表时,reduce函数将返回计数最大的项目。同样,在下面的第二个示例中,您可以使用Math.max()比较所有计数来获取数字。

var data = [
  {_id: "item1", count: 300},
  {_id: "item2", count: 265},
  {_id: "item3", count: 410},
  {_id: "item4", count: 115},
  {_id: "item5", count: 395},
];

var highestCountObject = data.reduce((res, item) => item.count > res.count ? item : res, {count: -Infinity});

console.log(highestCountObject);

var highestNumber = Math.max(...data.map(item => item.count));

console.log(highestNumber);