我想比较一个看起来像这样的对象文字......
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
}
}
答案 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];
};