我有数组
[
{
"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.keys
和 map
迭代购物车中的 ID:
Object.keys(cart).map(id => productMap[id])
这可确保您仅循环浏览一次产品列表,而不是循环浏览购物车中的每个商品。
另请注意,如果您向我们展示您所做的尝试,您可能会从您的问题中得到更多信息。您知道 reduce
和 map
的作用吗?
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/