计算对象内对象内的值

时间:2017-06-28 12:13:54

标签: javascript object javascript-objects

我在对象中有一个对象,我想要计算数量并返回值。

示例:

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
}

非常感谢。

6 个答案:

答案 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对象中。

&#13;
&#13;
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;
&#13;
&#13;

希望这会有所帮助:)。