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

から同じキーが、これはボブにするために追加する方法がある場合に値を追加します。ボブとそれを置き換えるのではなく、26: 12? ありがとうございます。私は、このようなobj.bob =「12」、 として、このオブジェクトに追加した場合、オブジェクト

+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

あなたはProxyオブジェクトが基本的な操作のためのカスタム動作を定義するために使用される(例えば、プロパティ参照、代入されProxy

、ES6機能を使用することができ、列挙、関数呼び出しなど)。

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

これはセッターとゲッターを使用してプロキシなしで行うことができます。 – 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

関連する問題