当一个字符串时访问一个Object文字键?

时间:2015-03-19 17:43:09

标签: javascript

我想比较一个看起来像这样的对象文字......

receipt.tab = {Cafe Latte: 4.75, Cappucino: 3.85}

当我调用方法addItemAndPrice(item)时,会添加这些项目,如下所示...

var Receipt = function(){
    this.tab = {};
};

Receipt.prototype.addItemAndPrice = function(item){
    if (comparisonHere???){
        this.tab[item] = this.tab[item] + this.tab[item] = menu.prices[item];
    } else {
        this.tab[item] = menu.prices[item];
    }
};

我想调用该方法,如果在标签中找到了Cafe Latte,那么我想将该项的值添加到相应的项值。

并创建此...

receipt.tab = {Cafe Latte: 9.50, Cappucino: 3.85}

FYI menu看起来像这样......

var menu = {
  "shopName": "The Coffee Connection",
  "address": "123 Lakeside Way",
  "phone": "16503600708",
  "prices": 
  {
  "Cafe Latte": 4.75,
  "Flat White": 4.75,
  "Cappucino": 3.85,
  "Single Espresso": 2.05,
  "Double Espresso": 3.75,
  "Americano": 3.75,
  "Cortado": 4.55,
  "Tea": 3.65,
  "Choc Mudcake": 6.40,
  "Choc Mousse": 8.20,
  "Affogato": 14.80,
  "Tiramisu": 11.40,
  "Blueberry Muffin": 4.05,
  "Chocolate Chip Muffin": 4.05,
  "Muffin Of The Day": 4.55
  }
}

2 个答案:

答案 0 :(得分:0)

如果(receipt.tab.hasOwnProperty(item)){...}是最好的,因为它捕获了allocate.tab [item]被定义但是falsy的情况(如{'Caffe Latte':0}),但是在你的情况下,如果(receipt.tab [item]){...}可能有效,因为无论如何所有的假值都应解析为0。

答案 1 :(得分:0)

您可以使用hasOwnProperty方法检查属性是否存在。如果是,您只需更改值:

Receipt.prototype.addItemAndPrice = function(item){
    if (this.tab.hasOwnProperty(item)){
        this.tab[item] += menu.prices[item];
    } else {
        this.tab[item] = menu.prices[item];
    }
};

如果您知道有效值永远不会为false,或者该值可以被视为零,则可以简化此操作。然后你可以用零替换任何虚假值并分配总和:

Receipt.prototype.addItemAndPrice = function(item){
    this.tab[item] = (this.tab[item] || 0) + menu.prices[item];
};