【问题标题】:Adding number to object returns NaN向对象添加数字返回 NaN
【发布时间】:2017-09-17 17:26:59
【问题描述】:

我有一个稍微复杂的循环:

angular.forEach($scope.days[i].trackers, function(key, value) {
    angular.forEach(key, function(el, name) {
        if(el.value != undefined) {
            counter = counter + parseInt(el.value);
        }
    });
    arr[value] = parseInt(arr[value]) + counter;
    counter = 0;
});

我认为重要的一点是counter = counter + parseInt(el.value);arr[value] = parseInt(arr[value]) + counter;

value 是随机生成的密钥,但我需要存储所有 el.valuetotal,因此我将它们全部加起来并将它们分配给随机生成的密钥。

这有点像:

0:NaN
1:NaN
-KuBV9A1YKgp-WBNrZgx:NaN
-KuBV_8NjZ_cu1fB2j2z:NaN
-KuCiznaYshVFsrutc68:NaN
-KuCjTcy8CuV1zvJRyPm:NaN
-KuClWJqnRjnkNkXZ046:NaN
-KuClnc4I3FhMLLV8cf0:NaN

老实说,一开始我不知道那两个整数是什么..

无论如何,它会返回 NaN,但是如果我使用 arr[value] = counter; 而不是 arr[value] = parseInt(arr[value]) + counter; 它实际上会返回数字,但问题是它只是相互覆盖并且不会产生 total 它会产生最后一个 @ 987654331@

我有什么明显的遗漏吗?我真的需要一个总数或数字总和..有什么想法吗?谢谢!

编辑:

$scope.days[i].trackers 看起来像这样:

trackers
 -KuBV9A1YKgp-WBNrZgx
   -KuFEv1AiaHwur--Al_K
      note: "Pizza"
      value: "400"
   -KuFF-N41Oh6Y5zDTpc6
      note: "Jam"
      value: "200"
 -KuBV_8NjZ_cu1fB2j2z
   -KuFF3S3Jr9QSlUSvjqB
     note: "Morning"
     value: "150"
...etc

【问题讨论】:

  • 你能分享days[i].trackers的数据结构吗?
  • @NafiulIslam 在编辑中添加

标签: javascript angularjs loops for-loop foreach


【解决方案1】:

您正在累积(对所有值求和)并将它们添加到您从未初始化的 arr[value](因此将 undefined 值作为初始值)。你应该先检查它是否有值:

arr[value] = arr[value] || 0;
arr[value] = arr[value] + counter;

或一行:

arr[value] = (arr[value] || 0) + counter;

【讨论】:

  • 是的,这行得通!谢谢你。当它让我确认时将作为答案。
猜你喜欢
  • 1970-01-01
  • 2015-03-16
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 2014-04-21
  • 2015-05-27
  • 2020-05-06
相关资源
最近更新 更多