Selectful
Selectful

Reputation: 107

Add Value if Same Key from Object

var obj = {
bob : 14
jan : 2
}

If i add to this object, such as obj.bob = "12", is there a way to add this to make bob : 26 instead of replacing it with bob: 12? Thank you.

Upvotes: 1

Views: 2237

Answers (4)

lonesomeday
lonesomeday

Reputation: 237865

The simple, and almost certainly correct, answer is to use the addition assignment += operator, which adds the right operand to the left operand.

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

You may want to have a system where setting a property with the assignment operator = actually adds the value to the property's existing value. This seems confusing and unlikely to be helpful, but it is technically possible using 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'

I can't believe this is ever likely to be desired behaviour, however.

Upvotes: 0

Nina Scholz
Nina Scholz

Reputation: 386604

You could use an ES6 feature, Proxy

The Proxy object is used to define custom behavior for fundamental operations (e.g. property lookup, assignment, enumeration, function invocation, etc).

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

Upvotes: 5

Pablo Salcedo T.
Pablo Salcedo T.

Reputation: 904

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

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

Upvotes: 1

Mohammad Ibrahim
Mohammad Ibrahim

Reputation: 56

So, you use this way.

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

obj.bob += 12;

console.log(obj);

Upvotes: 2

Related Questions