【问题标题】:How to GROUP and SUM json data using angular/ionic?如何使用角度/离子对 json 数据进行分组和求和?
【发布时间】:2017-07-07 20:58:40
【问题描述】:

我有一个如下所示的 JSON 对象:

  "Classes": [
    {
      "ID": "MATH101",
      "Class": "Math",
      "StudentCount": "2"
    },
    {
      "ID": "MATH101",
      "Class": "Math",
      "StudentCount": "8"
    },
    {
      "ID": "ENGLISH101",
      "Class": "English",
      "StudentCount": "13"
    }]

此 JSON 对象存储在 $scope 中。 如何先按 Class 对数据进行分组,然后对 StudentCount 求和?

所以生成的 JSON 对象看起来像这样 - 理想情况下存储为新的范围变量:

  "Classes": [
    {
      "ID": "MATH101",
      "Class": "Math",
      "StudentCount": "10"
    },
    {
      "ID": "ENGLISH101",
      "Class": "English",
      "StudentCount": "13"
    }]

我到处搜索,唯一能找到的是与ng-repeat 结合使用的示例,但我在这里没有使用它。我只需要按摩这些数据以在 angular-chartjs 中使用。

非常感谢您花时间看我的问题。

【问题讨论】:

    标签: javascript angularjs json ionic-framework


    【解决方案1】:

    转换只是一个逻辑部分,您的ng-repeat 以及您可以使用的所有内容在 UI 中呈现您想要的样子。

    在这里我正在编写一个可以为你完成这项工作的函数

    function populateSumArray(inputClasses) {
        opClasses = [];
        inputClasses.forEach(function(item) {
            var existing = opClasses.find(function(each) {
                return each.Class === item.Class;
            });
            if (existing) {
                existing.StudentCount = parseInt(existing.StudentCount) + parseInt(item.StudentCount);
            } else {
                opClasses.push(item);
            }
        });
        return opClasses;
    }
    

    您可以调用它来将其转换为一个新数组(计算)并将其存储在您需要的任何位置。如果您想更新相同的范围变量,那么这里是一个示例

    $scope.Classes = populateSumArray($scope.Classes)
    

    希望,它会有所帮助:)

    【讨论】:

    • 感谢您的帮助!我得到 inputClasses.forEach 不是一个函数有什么想法吗?
    • 传递一个数组给函数,你到底传递了什么?
    • 我在一个名为 $scope.classes 的变量中有 JSON 对象。如何将此变量传递给您的函数,以便它转换 JSON?
    • 您的对象$scope.classes 有一个名为Classes 的属性,对吗?然后试试$scope.classes.Classes = populateSumArray($scope.classes.Classes)
    • 啊哈!做到了!你就是那个男人!但是真的很快——如果我的 StudentCount 并不总是一个整数呢?如果它有像​​ 1.5 这样的小数呢?看起来 parseInt 干扰了小数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多