【问题标题】:Returning Min Value found in array of objects返回在对象数组中找到的最小值
【发布时间】:2021-10-19 15:41:42
【问题描述】:

我有一个包含对象数组的键对象。在每个对象数组中,都有一个价格值。我希望返回找到的最低/最低价格。在此示例中,我想返回值 8。我应该使用reduce方法吗?

对象示例

const obj =
{
   small: [{ price: 10 }, { price: 90 }],
   medium: [{ price: 33 }, { price: 8 }],
   large: [{ price: 34 }, { price: 44 }]
}

当前代码

Object.entries(obj)

【问题讨论】:

    标签: javascript arrays object ecmascript-6


    【解决方案1】:

    请试试这个代码

    const obj = {
       small: [{ price: 10 }, { price: 90 }],
       medium: [{ price: 33 }, { price: 8 }],
       large: [{ price: 34 }, { price: 44 }]
    }
    
    const values = Object.values(obj) // [[{ price: 10 }, { price: 90 }], [{ price: 33 }, { price: 8 }], [{ price: 34 }, { price: 44 }]]
    const flated = values.flat() // [{ price: 10 }, { price: 90 }, { price: 33 }, { price: 8 }, { price: 34 }, { price: 44 }]
    const prices = flated.map(x=>x.price) // [10, 90, 33, 8, 34, 44]
    const min = Math.min(...prices) // 8
    

    或者使用这个等价链:

    Math.min(...Object.values(obj).flat().map(o=>o.price))
    

    【讨论】:

      【解决方案2】:

      你可以使用这个链:

      const obj =
      {
         small: [{ price: 10 }, { price: 90 }],
         medium: [{ price: 33 }, { price: 8 }],
         large: [{ price: 34 }, { price: 44 }]
      }
      
      console.log(Math.min(...Object.values(obj).flat().map(({price}) => price)));

      Object.values()
      Array.prototype.flat()
      Array.prototype.map()

      【讨论】:

        【解决方案3】:

        它使用reduce() 迭代所有价格并取所有价格的最低价格。如果找到低于当前最低价格的价格,它将替换保存最低价格的acc 值。初始最低价为Number.MAX_SAFE_INTEGER

        const obj =
        {
           small: [{ price: 10 }, { price: 90 }],
           medium: [{ price: 33 }, { price: 8 }],
           large: [{ price: 34 }, { price: 44 }]
        }
        
        const min = Object.values(obj).flat().reduce((acc, item) => 
          item.price < acc ? item.price : acc, 
        Number.MAX_SAFE_INTEGER);
        
        console.log(min);

        【讨论】:

          【解决方案4】:

          请使用此代码。

          const obj =
          {
             small: [{ price: 10 }, { price: 90 }],
             medium: [{ price: 33 }, { price: 8 }],
             large: [{ price: 34 }, { price: 44 }]
          }
          
          const list = Object.values(obj).flat().map(val => val.price);
          console.log(Math.min(...list));

          【讨论】:

            猜你喜欢
            • 2021-05-29
            • 2018-02-10
            • 2021-12-27
            • 1970-01-01
            • 2021-12-28
            • 2019-05-02
            • 2020-07-06
            • 2015-03-15
            • 2018-04-08
            相关资源
            最近更新 更多