2017-02-15 77 views
1
var obj = { 
bob : 14 
jan : 2 
} 

相同的密钥。如果我到这个对象,如obj.bob =“12”, 有没有办法来增加这让鲍勃:鲍勃替换它的26来代替: 12? 谢谢。添加值,如果从Object

+2

递增当前值..'obj.bob + = 12' – charlietfl

+1

'obj.bob = obj.bob? obj.bob + 12:+ 12' – naortor

回答

1

所以,你用这种方式。

var obj = { 
bob : 14, 
jan : 2 
} 

obj.bob += 12; 

console.log(obj); 
1

var obj = { 
 
    bob : 14, 
 
    jan : 2 
 
} 
 

 
obj.bob += 12; 
 
console.log(obj.bob)

4

你可以使用一个ES6功能,Proxy

Proxy对象用于定义基本操作的自定义行为(如财产查找,分配,枚举,函数调用等)。

var obj = { bob: 14, jan: 2 }, 
 
    p = new Proxy(obj, { 
 
     set: function(target, prop, value) { 
 
      target[prop] = (target[prop] || 0) + value; 
 
     } 
 
    }); 
 
    
 
p.bob = 10; 
 
console.log(p.bob); // 24 
 
p.jane = 42; 
 
console.log(p.jane); // 42

+0

我应该仔细阅读,这正是OP想要的东西xD – Cerbrus

+0

这可以在没有使用setters和getters的代理的情况下完成。 – lonesomeday

0

简单,而且几乎肯定是正确的,答案是使用addition assignment += operator,增加右操作数向左操作数。

obj.bob += 12; //obj.bob is now 26 

可能希望有一个系统,其中设置一个属性与assignment operator =实际上增加价值的财产的现有价值。这似乎是混乱和不太可能是有益的,但它使用Object.defineProperty在技术上是可行的:

let _bob = 14; 
Object.defineProperty(obj, 'bob', { 
    set(newValue) { 
     _bob += Number(newValue); 
    }, 
    get() { 
     return _bob; 
    } 
}); 

obj.bob = 12; 
console.log(obj.bob); // logs '26' 

我不能相信这是以往任何时候都可能然而,可以预期的行为。

+0

你如何处理新房产? –

+0

@NinaScholz初始值是在问题中的对象字面值中指定的。这反映了这一点。 – lonesomeday