【问题标题】:How to return an array of objects with a key of least value? [duplicate]如何返回具有最小值键的对象数组? [复制]
【发布时间】:2021-05-22 15:55:13
【问题描述】:

我有一个对象数组,如下所示。如何返回包含bidAmount最小值的对象数组?

[
{userId:2,bidAmount:9200},
{userId:3,bidAmount:8500},
{userId:4,bidAmount:8100},
{userId:5,bidAmount:8100}
]

预期结果:

[
{userId:4,bidAmount:8100},
{userId:5,bidAmount:8100}
]

我尝试使用 Array.reduce 找到最小值,但它只返回一个对象

var min = result.reduce(function(res, obj) {
    return (obj.bidAmount < res.bidAmount) ? obj : res;
});
//Returns {userId: 4, bidAmount: 8100}

如何做到这一点?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您可以使用数组作为结果集进行归约,并检查 bidAmount 是否更小或相等。

    const data = [{userId: 2, bidAmount: 9200}, {userId: 3, bidAmount: 8500}, {userId: 4, bidAmount: 8100}, {userId: 5, bidAmount: 8100}]
    var minima = data.reduce((acc, el, index) => {
      if (!index || acc[0].bidAmount > el.bidAmount) return [el];
      if (acc[0].bidAmount === el.bidAmount) acc.push(el);
      return acc;
    }, null);
    
    console.log(minima);
    .as-console-wrapper {
      max-height: 100% !important;
      top: 0;
    }

    【讨论】:

      【解决方案2】:

      首先,获取数组中的所有bidAmounts。之后,获取最小的bidAmount 的索引(并将它们存储在indexs 中)。最后,只需通过索引获取和返回元素。

      const data = [{userId:2,bidAmount:9200}, {userId:3,bidAmount:8500}, {userId:4,bidAmount:8100}, {userId:5,bidAmount:8100}];
      
      var bidAmounts = data.map(el => el.bidAmount),
          minVal = Math.min(...bidAmounts),
          filteredData = data.filter(dataPoint => dataPoint.bidAmount == minVal);
      
      console.log(filteredData)

      【讨论】:

      • 您可以事先计算Math.min(...bidAmounts),而不是在每个循环中都这样做。
      • 我最初是这样做的,但由于某种原因我删除了它 - 我很笨?。感谢收看!
      • 您认为在这一点上执行 bidAmounts.forEach( ... ) 与仅使用 minVal 过滤数据有什么好处吗?
      • 您不能使用filter 并返回索引。然而,我正在使用reduce 做一些非常相似的事情,并使用它进一步减少了上面的代码(它困扰了我很长时间)。
      • 我想知道索引是否真的有必要。就像也许一旦你有了 minVal,你就可以这样做:data.filter((item) =&gt; item.bidAmount === minVal)
      猜你喜欢
      • 2021-07-26
      • 2019-09-28
      • 2021-05-29
      • 1970-01-01
      • 2021-10-02
      • 2013-09-28
      • 1970-01-01
      • 2018-02-10
      • 2017-03-13
      相关资源
      最近更新 更多