我在对象中有一个对象,我想要计算数量并返回值。
示例:
cart: {items: {A {number: 'xxx', quantity: 1, price: 999}, B {number: 'xxx', quantity: 3, price: 999}, C {number: 'xxx', quantity: 2, price: 999} }}
我现在想要的是数量计数的返回6.
这是我迄今取得的成就。我该怎么办?
function() {
var value = {{DataWithInformations}}
var itemCount = cart.items.quantity
}
非常感谢。
答案 0 :(得分:1)
有几种方法可以解决这个问题。
最干净的一个可能就是使用reduce
函数:
data.cart.items.reduce((sum, item) => sum + item.quantity, 0);
使用ES5编写(没有箭头功能),它看起来像这样:
data.cart.items.reduce(function (sum, item) { return sum + item.quantity }, 0);
(注意:您发布的内容不是有效的JSON或有效对象,因此我对该对象的实际情况做了一些猜测。
const data = {
cart: {
items: [
{ quantity: 1 },
{ quantity: 2 },
{ quantity: 3 }
]
}
};
const sum = data.cart.items.reduce((sum, item) => sum + item.quantity, 0);
console.log(sum);

更新以使用问题中更改的对象:
ES6:
Object.keys(a.cart.items).reduce((sum, key) => sum + a.cart.items[key].quantity, 0);
ES5:
Object.keys(a.cart.items).reduce(function (sum, key) { return sum + a.cart.items[key].quantity, 0);
const a = {
cart: {
items: {
A: {number: 'xxx', quantity: 1, price: 999},
B: {number: 'xxx', quantity: 3, price: 999},
C :{number: 'xxx', quantity: 2, price: 999}
}
}
};
const result = Object.keys(a.cart.items).reduce((sum, key) => sum + a.cart.items[key].quantity, 0);
console.log(result);

答案 1 :(得分:1)
您可以使用reduce函数从数组中获取值。 PS:你提供的数据结构在语法上是不正确的,所以我要做一些假设。
var data = {
cart: {
items: [{
number: 'xxx',
quantity: 1,
price: 999
},
{
number: 'xxx',
quantity: 3,
price: 999
},
{
number: 'xxx',
quantity: 2,
price: 999
}
]
}
};
var qtySum = data.cart.items.reduce(function(mem, item) {
mem += item.quantity;
return mem;
}, 0);
console.log("Total count:", qtySum);

答案 2 :(得分:0)
这应该是一个解决方案:
a = {cart:{items:{A:{number: 'xxx', quantity: 1, price: 999}, B: {number: 'xxx', quantity: 3, price: 999}, C :{number: 'xxx', quantity: 2, price: 999} }}};
sum=0;
for(key in a.cart.items){
sum += a.cart.items[key].quantity;
}
console.log(sum);

答案 3 :(得分:0)
干净的ES6解决方案:
const cart = {
items: {
A: {number: 'xxx', quantity: 1, price: 999},
B: {number: 'xxx', quantity: 3, price: 999},
C :{number: 'xxx', quantity: 2, price: 999}
}
};
const total = Object.values(cart.items)
.map((obj) => obj.quantity)
.reduce((prev, curr) => prev + curr, 0);
console.log(total);
答案 4 :(得分:0)
您需要循环到JSON,然后添加quantity
。
var jsonData = {'cart':
{'items':
{
'A':{'number': 'xxx', 'quantity': 1,'price': 999},
'B' : {'number': 'xxx', 'quantity': 3, 'price': 999},
'C':{'number': 'xxx', 'quantity': 2, 'price': 999}
}
}
};
var keys = Object.keys(jsonData.cart.items);
var quantity = 0;
for(var i=0; i<keys.length; i++){
var key = keys[i];
var item = jsonData.cart.items[key];
quantity += item.quantity;
}
alert(quantity);
以下是JSFIDDLE
的链接答案 5 :(得分:0)
我会为您的问题使用for
循环。
我看到你在cart
之后放了一个冒号,所以我猜你的购物车在另一个JSON对象中。
var foo = {
cart: {
items: {
A: {number: 'xxx', quantity: 1, price: 999},
B: {number: 'xxx', quantity: 3, price: 999},
C: {number: 'xxx', quantity: 2, price: 999}
}
}
};
// This is what you need
document.getElementById("please-click-me").onclick = function() {
var sum = 0;
// Note that the 'in' gives you the keys, not the objects themselves
for (var key in foo.cart.items) {
sum += foo.cart.items[key].quantity;
}
alert(sum);
}
&#13;
<button id="please-click-me">Click</button>
&#13;
希望这会有所帮助:)。