过滤对象数组以获得最大的剩余容量



如果我有一个对象数组,比如

let discList = [{
"id" : 1,
"capacity" : 100,
"used" : 50
}, {
"id" : 2,
"capacity" : 200,
"used" : 10
}, {
"id" : 3,
"capacity" : 50,
"used" : 10}]

有没有办法过滤这个数组,这样我就可以获得剩余容量最大的项目?

remainingCapacity=使用的容量;

在上面的例子中,我希望得到第二个项目。自

1st item = 100-50 = 50
2nd item = 200-10 = 190
3rd item = 50-10 = 40
reduce((是最简单的方法。逐渐在数组中循环,并不断用最高的对象替换对象。到阵列结束时,您将获得最大

let discList = [{
"id" : 1,
"capacity" : 100,
"used" : 50
}, {
"id" : 2,
"capacity" : 200,
"used" : 10
}, {
"id" : 3,
"capacity" : 50,
"used" : 10
}]
var max = discList.reduce(function(prev, current) {
return (prev.capacity - prev.used > current.capacity - current.used) ? prev : current
});
console.log(max);

我会避免走排序路线,因为这会导致很多不必要的比较,并且数组的大小越大,成本就会越高(由于重新排序所有元素所需的步骤(

您可以使用array.reduced:

let discList = [{
"id" : 1,
"capacity" : 100,
"used" : 50
}, {
"id" : 2,
"capacity" : 200,
"used" : 10
}, {
"id" : 3,
"capacity" : 50,
"used" : 10}
];
const mostRemainingCapacity = discList.reduce((a, e) => 
e.capacity - e.used > a.capacity - a.used ? e : a, 
{capacity: -Infinity, used: Infinity}
);
console.log(mostRemainingCapacity);

解释

从一个具有最差剩余容量的对象开始约简,即负无穷大容量和使用的无穷大空间。对每个元素进行迭代,将其剩余容量与迄今为止最好的进行比较,并返回两者中更好的。

应该很容易减少

const discList = [{
"id": 1,
"capacity": 100,
"used": 50
}, {
"id": 2,
"capacity": 200,
"used": 10
}, {
"id": 3,
"capacity": 50,
"used": 10
}];
console.log(discList.reduce((max, {capacity, used}) => {
return Math.max(max, capacity - used);
}, 0));

最新更新