我在这里有我的路由器,可从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}]
我的问题是,如何获得库存数组中计数的最大值?
答案 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);