【问题标题】:javascript: updating Object by incrementing objectKeys valuejavascript:通过增加 objectKeys 值来更新 Object
【发布时间】:2016-03-10 16:36:13
【问题描述】:

我正在尝试制作一个对象,其中键是年数,值是金额

yearlyCost = {"2016":0,"2017":0,"2018":0,"2019":0} //year(key):amount(value)

我在视图中有一个输入字段,可以让我创建新金额,并且每次我添加不同的 addLocalCostContributor 时,它都会检查条件是否匹配,金额将添加到年份。

function addLocalCostContributor(localCost, year) {
        localCost.contributors.push({});

          for(var i=0; i < localCost.contributors.length;i++ ) {
            if(angular.isDefined(localCost.contributors[i].contributor) && localCost.contributors[i].contributor.name ==='Agriterra') {
              vm.argiterraYearlyLocalCost[year] = localCost.contributors[i].amount;
            }
          }
    }

问题是,每当添加新金额并满足条件时,我希望年份添加该金额。因此,如果“2016”年获得新金额,则应将该金额添加到“2016”键中,而不是替换它。

如果有更好的方法来保存年度金额并进行更新,我愿意接受。

【问题讨论】:

  • if (vm.argiterraYearlyLocalCost[year]) vm.argiterraYearlyLocalCost[year] += localCost.contributors[i].amount;

标签: javascript angularjs object


【解决方案1】:

使用+=:

vm.argiterraYearlyLocalCost[year] += localCost.contributors[i].amount;

事实上,只是为了确保特定年份的密钥存在:

if(vm.argiterraYearlyLocalCost.hasOwnProperty(year)) {
    vm.argiterraYearlyLocalCost[year] += localCost.contributors[i].amount;
}
else {
    vm.argiterraYearlyLocalCost[year] = localCost.contributors[i].amount;
}

【讨论】:

  • 您也可以使用 vm.argiterraYearlyLocalCost[year] = (vm.argiterraYearlyLocalCost[year] || 0) + localCost.contributors[i].amount 并跳过 hasOwnProperty 检查。
  • @AmyBlankenship 如果我添加 22,您的解决方案将返回 {2016:"022"},如果在同一年添加 1,那么它会记录 2 个对象:{2016:"02222"} 和 {2016: "022221"}
  • 这可能是因为您在数据中获取了一个字符串,而它应该是一个整数。
  • 一个javascript对象不能有两个同名的属性。您显示的内容表明您没有您在帖子中描述的对象结构。相反,您可能有一个对象数组或其他东西。
  • @TarunDugar 我尝试了您的解决方案,但如果我将 222 添加到 2016 并且如果我将 1 添加到同一个键,它会记录 {2016: "undefined222"},它会记录 2 个对象:{2016: "undefined222222 "} 和 {2016: "undefined2222221"}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多