javascript - 如何使用map()和find()方法搜索对象数组中的最小值?

标签 javascript typescript optimization

任务

有一个以下形式的对象数组:

{
  title: 'Macbook Air',
  offers: [
    {
      seller: 'Avic',
      price: 1200
    },
    {
      seller: 'Citrus',
      price: 1600
    }
  ]
}

有必要转换为以下形式的对象数组:

{
  title: 'Macbook Air',
  bestOffer: {
    name: 'Avic',
    price: 1200
  }
}

其中 bestOffer 是具有最低价格值的报价。
使用map()find()写成一行。

代码

"use_strict";
 
var productList = [
  {
    title: "Product X1",
    offers: [
      {
        seller: "Company X1",
        price: 400
      },
 
      {
        seller: "Company X2",
        price: 200
      },
 
      {
        seller: "Company X3",
        price: 300
      }
    ]
  },
 
  {
    title: "Product Y1",
    offers: [
      {
        seller: "Company Y1",
        price: 1700
      },
 
      {
        seller: "Company Y2",
        price: 1600
      },
 
      {
        seller: "Company Y3",
        price: 1500
      },
 
      {
        seller: "Company Y4",
        price: 1400
      }
    ]
  },
 
  {
    title: "Product Z1",
    offers: [
      {
        seller: "Company Z1",
        price: 50
      },
 
      {
        seller: "Company Z2",
        price: 60
      },
 
      {
        seller: "Company Z3",
        price: 10
      },
 
      {
        seller: "Company Z4",
        price: 90
      },
 
      {
        seller: "Company Z5",
        price: 70
      }
    ]
  }
]; 
 
const destinations = productList.map(item =>
    ({
        title: item.title,
        bestOffer: ({
            name: item.offers[0].seller, // TODO: How to implement find() method????
            price: item.offers[0].price
        })
    })
)
console.log(destinations) 

我的代码用于重组新数组的对象,但我不知道如何实现 find() 方法来搜索最小值。在这种情况下可以使用 find() 方法吗?

最佳答案

您可以使用Array.reduce()按价格找到最佳报价。在每次迭代中,检查当前商品的 (o) 价格是否低于累加器 (r) 的价格,并选择最低的价格。

const productList = [{"title":"Product X1","offers":[{"seller":"Company X1","price":400},{"seller":"Company X2","price":200},{"seller":"Company X3","price":300}]},{"title":"Product Y1","offers":[{"seller":"Company Y1","price":1700},{"seller":"Company Y2","price":1600},{"seller":"Company Y3","price":1500},{"seller":"Company Y4","price":1400}]},{"title":"Product Z1","offers":[{"seller":"Company Z1","price":50},{"seller":"Company Z2","price":60},{"seller":"Company Z3","price":10},{"seller":"Company Z4","price":90},{"seller":"Company Z5","price":70}]}]

const findBestOffer = ({ offers = [] }) => offers
  .reduce((r, o) => o.price < r.price ? o : r)

const formatOffer = item => item ? ({
  name: item.seller,
  price: item.price
}) : 'none'

const destinations = productList.map(item => ({
  title: item.title,
  bestOffer: formatOffer(findBestOffer(item))
}))

console.log(destinations)

如果您需要使用 Array.map()Array.find() - 将数组映射到价格数字,并使用 获取最低的价格>Math.min(),然后找到具有该价格的商品:

const productList = [{"title":"Product X1","offers":[{"seller":"Company X1","price":400},{"seller":"Company X2","price":200},{"seller":"Company X3","price":300}]},{"title":"Product Y1","offers":[{"seller":"Company Y1","price":1700},{"seller":"Company Y2","price":1600},{"seller":"Company Y3","price":1500},{"seller":"Company Y4","price":1400}]},{"title":"Product Z1","offers":[{"seller":"Company Z1","price":50},{"seller":"Company Z2","price":60},{"seller":"Company Z3","price":10},{"seller":"Company Z4","price":90},{"seller":"Company Z5","price":70}]}]

const findBestOffer = ({ offers = [] }) => {
  const min = Math.min(...offers.map(o => o.price))
  
  return offers.find(o => o.price === min)
}

const formatOffer = item => item ? ({
  name: item.seller,
  price: item.price
}) : 'none'

const destinations = productList.map(item => ({
  title: item.title,
  bestOffer: formatOffer(findBestOffer(item))
}))

console.log(destinations)

关于javascript - 如何使用map()和find()方法搜索对象数组中的最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58632647/

相关文章:

javascript - 使用边框颜色的 Chrome 表格 css 故障

javascript - 在 Typescript 中导入 Chai

javascript - 尝试在循环内使用固定数组点进行捕获优化 - javascript

通过分组优化 Python 打包

javascript - 如何根据该列标题检查表格行中的单选按钮?

javascript - preventDefault() 和 stopImmediatePropagation 不工作

php - 如何避免多次重新加载 XML 文档?

javascript - Node.js '[object File]' BLOB

typescript - 按照 Jest Docs,在 mockImplementation() 上出现错误。我究竟做错了什么?

python - numpy.subtract 但仅直到差异达到阈值 - 用阈值替换小于该值的数字