鉴于我有一个对象数组,例如
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
答案 0 :(得分:2)
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);
我会避免进行排序,因为这会导致很多不必要的比较,并且数组的大小越大,由于进行重新排序所需的步骤就越多(因为要对所有元素进行重新排序)
答案 1 :(得分:1)
您可以使用array.reduce:
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);
从具有最差的剩余容量的对象开始缩小,即,使用的负无穷大容量和无穷大空间。遍历每个元素,将其剩余容量与迄今为止的最大容量进行比较,然后返回两者中的更好者。
答案 2 :(得分:1)
通过减少应该很容易
new_variable = int(user_input)