Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays AngularJS顺序JSON数组和内部数组_Arrays_Json_Angularjs - Fatal编程技术网

Arrays AngularJS顺序JSON数组和内部数组

Arrays AngularJS顺序JSON数组和内部数组,arrays,json,angularjs,Arrays,Json,Angularjs,嗨,在我的服务器控制器中,我得到了一个JSON字符串 $scope.unsorted=data; 数据看起来像 [ { "configId": 116, "configName": "LAND_LINE", "configFieldses": [ { "FieldId": 784, "FieldName": "engine.form.1", "values": [ {

嗨,在我的服务器控制器中,我得到了一个JSON字符串

$scope.unsorted=data;
数据看起来像

[
  {
    "configId": 116,
    "configName": "LAND_LINE",
    "configFieldses": [
      {
        "FieldId": 784,
        "FieldName": "engine.form.1",
        "values": [
          {
            "keyname": "formName",
            "value": "Account Number",
            "id": 3068
          },
          {
            "keyname": "formValuePosition",
            "value": "right",
            "id": 3069
          }
        ]
      },
      {
        "FieldId": 783,
        "FieldName": "engine.form.0",
        "values": [
          {
            "keyname": "formName",
            "value": "Amount",
            "id": 3074
          },
          {
            "keyname": "formValuePosition",
            "value": "right",
            "id": 3075
          },
          {
            "keyname": "regexGazatteer",
            "value": "Total Charges :",
            "id": 3076
          }
        ]
      },
      {
    "FieldId": 785,
        "FieldName": "engine.table2",
        "values": [
          {
            "keyname": "regexTableHeaderStart",
            "value": null,
            "id": 3079
          },
          {
            "keyname": "regexTableBodyEnd",
            "value": null,
            "id": 3080
          },
          {
            "keyname": "tableName",
            "value": "invoice",
            "id": 3078
          }
        ]
      }
    ]
  }
]
[
  {
    "configId": 116,
    "configName": "LAND_LINE",
    "configFieldses": [
      {
        "FieldId": 783,
        "FieldName": "engine.form.0",
        "values": [
          {
            "keyname": "formName",
            "value": "Amount",
            "id": 3074
          },
          {
            "keyname": "formValuePosition",
            "value": "right",
            "id": 3075
          },
          {
            "keyname": "regexGazatteer",
            "value": "Total Charges :",
            "id": 3076
          }
        ]
      },
      {
        "FieldId": 784,
        "FieldName": "engine.form.1",
        "values": [
          {
            "keyname": "formName",
            "value": "Account Number",
            "id": 3068
          },
          {
            "keyname": "formValuePosition",
            "value": "right",
            "id": 3069
          }
        ]
      },

      {
    "FieldId": 785,
        "FieldName": "engine.table2",
        "values": [
          {
            "keyname": "tableName",
            "value": "invoice",
            "id": 3078
          }
          {
            "keyname": "regexTableHeaderStart",
            "value": null,
            "id": 3079
          },
          {
            "keyname": "regexTableBodyEnd",
            "value": null,
            "id": 3080
          }
        ]
      }
    ]
  }
]
我想根据
FieldId
configFieldses
数组进行排序,并根据id对每个configFieldses中的
values
数组进行排序

[
  {
    "configId": 116,
    "configName": "LAND_LINE",
    "configFieldses": [
      {
        "FieldId": 784,
        "FieldName": "engine.form.1",
        "values": [
          {
            "keyname": "formName",
            "value": "Account Number",
            "id": 3068
          },
          {
            "keyname": "formValuePosition",
            "value": "right",
            "id": 3069
          }
        ]
      },
      {
        "FieldId": 783,
        "FieldName": "engine.form.0",
        "values": [
          {
            "keyname": "formName",
            "value": "Amount",
            "id": 3074
          },
          {
            "keyname": "formValuePosition",
            "value": "right",
            "id": 3075
          },
          {
            "keyname": "regexGazatteer",
            "value": "Total Charges :",
            "id": 3076
          }
        ]
      },
      {
    "FieldId": 785,
        "FieldName": "engine.table2",
        "values": [
          {
            "keyname": "regexTableHeaderStart",
            "value": null,
            "id": 3079
          },
          {
            "keyname": "regexTableBodyEnd",
            "value": null,
            "id": 3080
          },
          {
            "keyname": "tableName",
            "value": "invoice",
            "id": 3078
          }
        ]
      }
    ]
  }
]
[
  {
    "configId": 116,
    "configName": "LAND_LINE",
    "configFieldses": [
      {
        "FieldId": 783,
        "FieldName": "engine.form.0",
        "values": [
          {
            "keyname": "formName",
            "value": "Amount",
            "id": 3074
          },
          {
            "keyname": "formValuePosition",
            "value": "right",
            "id": 3075
          },
          {
            "keyname": "regexGazatteer",
            "value": "Total Charges :",
            "id": 3076
          }
        ]
      },
      {
        "FieldId": 784,
        "FieldName": "engine.form.1",
        "values": [
          {
            "keyname": "formName",
            "value": "Account Number",
            "id": 3068
          },
          {
            "keyname": "formValuePosition",
            "value": "right",
            "id": 3069
          }
        ]
      },

      {
    "FieldId": 785,
        "FieldName": "engine.table2",
        "values": [
          {
            "keyname": "tableName",
            "value": "invoice",
            "id": 3078
          }
          {
            "keyname": "regexTableHeaderStart",
            "value": null,
            "id": 3079
          },
          {
            "keyname": "regexTableBodyEnd",
            "value": null,
            "id": 3080
          }
        ]
      }
    ]
  }
]
我尝试的是先对父数组排序,然后对子数组排序

var sortedfieldses = orderByFilter($scope.unsorted.configFieldses, '+FieldId');
但是如何从未排序的配置中移除旧数组,并将新数组添加到未排序的配置中。以及如何循环每一个,然后对其进行排序


最好的方法是什么?

步骤1:复制对象,然后应用自定义排序功能

var sortedfieldses = angular.copy( $scope.unsorted.configFieldses );

sortedfieldses.sort( function( a, b ){
    return a.FieldId > b.FieldId;
});
步骤2:遍历“字段”并对其子项进行排序:

angular.forEach( sortedfieldses, function( field, key ){

    field.values.sort( function( a, b ){
        return a.id > b.id;
    });
});
实际上,重新阅读您的问题,听起来好像您只是想对“未排序”对象进行适当排序,而不是复制到“已排序”变量。如果是这种情况,请跳过对象复制,只需执行以下操作:

$scope.unsorted.configFieldses.sort( function( a, b ){
    return a.FieldId > b.FieldId;
});

angular.forEach( $scope.unsorted.configFieldses, function( field, key ){

    field.values.sort( function( a, b ){
        return a.id > b.id;
    });
});

排序方法改变原始数组,而不是简单地返回已排序的副本。

如果只需要对数组排序,可以这样做

    $scope.unsorted=data;

    // sort the parent
    $scope.unsorted[0].configFieldses.sort(function(config1, config2) {
        return config1.FieldId - config2.FieldId;
    });

    // sort the child values
    $scope.unsorted[0].configFieldses.forEach(function(configField){
        console.log(configField.values);

        configField.values.sort(function(value1, value2) {
            return value1.id - value2.id;
        });

    });
但是,如果您想使用ng repeat和orderBy过滤器显示数据,可以使用嵌套的ng repeat,如下所示

    <div ng-controller="ControllerX">
        <div ng-repeat="configField in unsorted[0].configFieldses | orderBy:'FieldId' ">
            <h3>{{configField.FieldId}}, {{configField.FieldName}}</h3>
            <ul>
                <li ng-repeat="value in configField.values | orderBy:'id'">
                    {{value.id}}, {{value.keyname}}
                </li>
            </ul>
        </div>
    </div>

{{configField.FieldId},{{configField.FieldName}
  • {{value.id},{{value.keyname}