【问题标题】:Updating nested object properties更新嵌套对象属性
【发布时间】:2016-08-28 01:53:06
【问题描述】:

我正在尝试更新嵌套对象的值。

对象:

var data = {
  "key 1": {
    "jan-16": 0,
    "feb-16": 0,
    "mar-16": 0
  },
  "key 2": {
    "jan-16": 0,
    "feb-16": 0,
    "mar-16": 0
  }
}

data["key 1"]["jan-16"] += 250;

问题是我所做的只是添加 0 + 250 但实际上并没有更新对象值

这就是我尝试使用其他代码的方式:

    if(firstBillDate.isBefore(dateEnd)) {
      while(intervalIterator > 0) {
        let targetService = report[service][monthInterval];
        if( !_.isNull(targetService) && !_.isUndefined(targetService) ) {
          targetService += cost; // Nothing is happening here
          monthInterval = moment(monthInterval).add(pmtInterval,'month').format('MMMM-YYYY');
          intervalIterator -= pmtInterval; //12-4
        }
      }
    }

【问题讨论】:

  • 显示的代码不是在控制台报错吗?
  • 始终在提问时检查并包含任何错误。
  • 您的代码在每个"jan16": 0 之后也没有逗号。这是您使用的确切代码吗?修复该语法错误后,您发布的代码可以正常工作,例如,更新 data 对象。
  • @qxz 我更新了操作
  • 该代码对我仍然有效。上下文是什么?你以后如何使用data

标签: javascript object


【解决方案1】:

当你这样做时:

let targetService = report[service][monthInterval];

因为该属性的值是一个原始数字(即,不是引用类型),targetService 创建该值的克隆,而不是对其的引用。因此,增加targetService 只会改变targetService,而不是原始对象。

只需用report[service][monthInterval] += cost; 替换问题行即可。我认为没有更优雅的方法可以做到这一点。

【讨论】:

  • 说得通,解决了这个问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 2015-10-25
  • 2012-02-27
相关资源
最近更新 更多