【问题标题】:Add Value if Same Key from Object如果对象中的键相同,则添加值
【发布时间】:2017-07-04 02:23:57
【问题描述】:
var obj = {
bob : 14
jan : 2
}

如果我添加到这个对象,比如obj.bob = "12", 有没有办法添加它来制作 bob : 26 而不是用 bob: 12 替换它? 谢谢你。

【问题讨论】:

  • 增加当前值..obj.bob += 12
  • obj.bob = obj.bob ? obj.bob + 12 : + 12

标签: javascript object key key-value


【解决方案1】:

简单且几乎肯定正确的答案是使用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'

然而,我不敢相信这可能是理想的行为。

【讨论】:

  • 您如何处理新房产?
  • @NinaScholz 在问题的对象文字中指定了一个初始值。这反映了这一点。
【解决方案2】:

您可以使用 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

【讨论】:

  • 我应该仔细阅读,这正是 OP 想要的 xD
  • 这可以在没有代理的情况下使用 setter 和 getter 来完成。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    所以,你用这种方式。

    var obj = {
    bob : 14,
    jan : 2
    }
    
    obj.bob += 12;
    
    console.log(obj);
    

    【讨论】:

      猜你喜欢
      • 2022-06-10
      • 1970-01-01
      • 2020-05-03
      • 2012-08-25
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      相关资源
      最近更新 更多