reduce((是最简单的方法。逐渐在数组中循环,并不断用最高的对象替换对象。到阵列结束时,您将获得最大
如果我有一个对象数组,比如
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
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));