1
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.

2
  • 2
    Increment current value .. obj.bob += 12 Commented Feb 15, 2017 at 12:16
  • 1
    obj.bob = obj.bob ? obj.bob + 12 : + 12 Commented Feb 15, 2017 at 12:18

4 Answers 4

5

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

Sign up to request clarification or add additional context in comments.

2 Comments

I should read more carefully, this is exactly what the OP wants xD
This can be done without proxies using setters and getters.
2

So, you use this way.

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

obj.bob += 12;

console.log(obj);

Comments

1

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

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

Comments

0

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.

2 Comments

what do you do with a new property?
@NinaScholz An initial value is specified in the object literal in the question. This mirrors that.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.