最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

javascript - Add Value if Same Key from Object - Stack Overflow

matteradmin7PV0评论
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.

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.

Share Improve this question asked Feb 15, 2017 at 12:14 SelectfulSelectful 1073 silver badges15 bronze badges 2
  • 2 Increment current value .. obj.bob += 12 – charlietfl Commented Feb 15, 2017 at 12:16
  • 1 obj.bob = obj.bob ? obj.bob + 12 : + 12 – naortor Commented Feb 15, 2017 at 12:18
Add a ment  | 

4 Answers 4

Reset to default 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

So, you use this way.

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

obj.bob += 12;

console.log(obj);

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

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

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.

Post a comment

comment list (0)

  1. No comments so far