javascript 是否将值Map到项目数组以填充缺少的对象属性?

vojdkbi0  于 2022-12-02  发布在  Java
关注(0)|答案(1)|浏览(144)

在JS中,我有一个项目数组,每个项目都有这样的形式:

{
  id: 'fa4da51',
  name: 'product-name',
  prettyName: 'Product Name',
  price: null,
}

我在数组上运行map,然后返回item.price以显示每件商品的价格。
我从外部API得到的一些项目没有价格(price设置为null)。API中的项目将来不会改变,id可能会改变,但名称不会。
我想出了一个主意,如果!item.price,那么让我们显示给定项目的回退价格。
要得到我想要的东西,最好的方法是什么?
我一直在考虑为每个项目创建一个Map(以防万一),如下所示:

var itemPrices = new Map([
   ['product-name', 100],
   ['product-name-2', 200],
   ['product-name-3', 300],
]);

然后做着:item.price ?? item.price || itemPrices[item.name].
对于大约5000个项目来说,这是一个好的方法吗?其中大约1500个项目没有价格。我能以某种方式调整它,使它更有性能吗?我想实现的东西有某种标准化的名称,这样我就可以谷歌它了吗?负责API的人正在休一个很长的病假,我不得不在没有访问后端的情况下修复这个问题。
谢谢你的提示。

j5fpnvbx

j5fpnvbx1#

我会让你的代码更好一点,但我会坚持使用散列表

var fallbackPrices = {
  'fa4da51': 100,
  'f4f8b1a': 200,
  'f9sd41d': 300,
};

function getFallbackPrice(item) {
  return fallbackPrices[item.id];
}

function getPrice(item) {
  return item.price != null ? item.price : getFallbackPrice(item);
}

// Example usage
var items = [
  {
    id: 'fa4da51',
    name: 'product-name',
    prettyName: 'Product Name',
    price: null,
  },
  {
    id: 'f4f8b1a',
    name: 'product-name-2',
    prettyName: 'Product Name 2',
    price: null,
  },
  {
    id: 'f9sd41d',
    name: 'product-name-3',
    prettyName: 'Product Name 3',
    price: 50,
  },
];

items.map((item) => {
  getPrice(item)
});

相关问题