我有阵列
[
{
"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个产品。我在这里有点迷失...减少,过滤,映射....我该怎么办?
感谢
答案 0 :(得分:1)
如果您要列出其他对象中可用的产品(使用产品ID作为键),您需要filter
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
},
]
const ids = {
'1': 2
}
console.log(products.filter(product => product.id in ids))

答案 1 :(得分:1)
您可以过滤产品并使用购物车数量构建新的结果集。
nullValue (default empty string): sets the string representation of a null value
答案 2 :(得分:1)
您可以使用reduce
按ID制作产品地图:
{
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);

答案 3 :(得分:1)
您可以创建一个输出对象,并添加该项目的次数。
var items = [{
"id": "1",
"Name": "Name 1",
"Price": 10,
"inventory": 1,
"date_added": 1496757350
}, {
"id": "2",
"Name": "Name 2",
"Price": 40,
"inventory": 1,
"date_added": 1496757290
}];
var cart = {
'1': 2,
'2': 15,
'10': 5
}
var output = {};
for (id in cart) {
item = items.find(x => x.id === id);
if (item != null)
output[id] = {
item: item,
count: cart[id]
};
}
console.log(output);

答案 4 :(得分:1)
出于速度原因,对于数组中的查找等,我倾向于使用另一个关联数组创建一种索引。像下面的东西..
var 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
}
];
var basket =
{
'1':2,
'2':15
};
//first lets create a kind of index to products..
var ixProducts = products.reduce((a, v) => { a[v.id] = v; return a; }, {});
Object.keys(basket).forEach((k) => {
console.log({
qty: basket[k],
product: ixProducts[k]
});
});

答案 5 :(得分:0)
let result = products.filter(function( obj ) {
return (Object.keys(quantityObject).indexOf(obj.id) !== -1);
});
那样的东西?过滤器检查对象id是否存在于quantity对象的键中,并根据结果返回true或false