Arrays AngularJS顺序JSON数组和内部数组
嗨,在我的服务器控制器中,我得到了一个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": [ {
$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}