javascript - 根据另一个对象的 id 列出数组中的产品

标签 javascript arrays javascript-objects

我有数组

[
  {
    "id": "1",
    "Name": "Name 1",
    "Price": 10,
    "inventory": 1,
    "date_added": 1496757350
  },
  {
    "id": "2",
    "Name": "Name 2",
    "Price": 40,
    "inventory": 1,
    "date_added": 1496757290
  },
...
]

和对象

{
'1':2,
'2':15
'10':5
}

像这样。因此第一个包含产品,该对象包含产品的 id(键)以及它已添加到购物车的次数(值)。 我想要实现的是,基于该对象,在另一个对象数组中基本上列出产品。因此,在本例中,该列表中将包含 3 个产品。我在这里有点迷失......减少,过滤,映射......我应该如何进行? 谢谢

最佳答案

您可以使用reduce按id制作产品 map :

{ 
  id: { /* ... product */ }
}

您可以使用 Object.keysmap 迭代购物车中的 ID:

Object.keys(cart).map(id => productMap[id])

这可确保您仅循环浏览一次产品列表,而不是循环浏览购物车中的每个商品。

另请注意,如果您向我们展示您所做的尝试,您可能会从您的问题中得到更多信息。您知道 reducemap 的作用吗?

const products = [
  {
    "id": "1",
    "Name": "Name 1",
    "Price": 10,
    "inventory": 1,
    "date_added": 1496757350
  },
  {
    "id": "2",
    "Name": "Name 2",
    "Price": 40,
    "inventory": 1,
    "date_added": 1496757290
  },
  {
    "id": "10",
    "Name": "Name 10",
    "Price": 40,
    "inventory": 1,
    "date_added": 1496757290
  }
]


const cart = {
  "1": 2,
  "2": 15,
  "10": 5
};

const productsById = products
  .reduce((map, prod) => Object.assign(map, { [prod.id]: prod }), {});
  
const list = 
  Object
    .keys(cart)
    // Here, you can make any combination you like
    // since both data are retrievable by id
    
    // Only products:
    //.map(id => productsById[id]);
 
    // Combination
    .map(id => ({ product: productsById[id], quantity: cart[id] }));
      
console.log(list);

关于javascript - 根据另一个对象的 id 列出数组中的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45799910/

相关文章:

javascript - 常规推送和 Array.prototype.push.apply 之间有什么区别

JavaScript/JSON : Get unknown property of an object

javascript - Firebase 数据库删除所有等于特定值的节点

javascript - 实用 javascript 练习资源

javascript - 定义所有属性后无法读取未定义 React 的属性 'bind'

javascript - JMeter 警告 : Nashorn engine is planned to be removed from a future JDK release

arrays - 在scala中打印类似表格的二维数组

javascript - 从两个数组创建一个对象

javascript - 使用Go读取用于javascript渲染的文件

javascript - 在对象上使用 jQuery grep