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

时间:2018-08-02 22:31:59

标签: javascript arrays filter

鉴于我有一个对象数组,例如

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

3 个答案:

答案 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)