在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的人正在休很长时间的病假,我不得不在没有访问后端的情况下对此进行热修复.

谢谢你的任何提示.

推荐答案

我会让您的代码更好一些,但是的,我会坚持使用哈希图

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)
});

Javascript相关问答推荐

Vega中的模运算符

模块与独立组件

微软Edge编辑和重新发送未显示""

用于编辑CSS样式的Java脚本

JS—删除对象数组中对象的子对象

如何在每次单击按钮时重新加载HighChart/设置HighChart动画?

Next.js服务器端组件请求,如何发送我的cookie token?

基于props 类型的不同props ,根据来自接口的值扩展类型

为什么这个.add.group({})在教程中运行得很好,但在我的游戏中就不行了?

如何访问此数组中的值?

FireBase云函数-函数外部的ENV变量

WebSocketException:远程方在未完成关闭握手的情况下关闭了WebSocket连接.&#三十九岁;

在渲染turbo流之后滚动到元素

更改agGRID/Reaction中的单元格格式

如何在下一个js中更改每个标记APEXCHARTS图表的 colored颜色

在将元素追加到DOM之前,createElement()是否会触发回流?混淆abt DocumentFragment行为

用内嵌的含selenium的Java脚本抓取网站

如何动态呈现适合未知屏幕大小的最大数量的表行?苗条的

Node.js的Fetch()调用总是创建新的Express会话

Iterator.Next不是进行socket.end()调用后的函数