将原始javascript对象数组转换为结构化对象树,为ng-repeat做好准备
Convert raw javascript object array into structured object tree ready for ng-repeat
我正在构建一个应用程序与node.js, mssql(不要问…客户端),插座。IO和angularjs.
我已经设法获得数据从mssql到角在以下形式。
[
{
"measure":"value",
"region":"London",
"manager":"Jack",
"supervisor":"James",
"number1":44,
"number2":2244.3,
"number3":1561.6
},
{
"measure":"value",
"region":"London",
"manager":"Jack",
"supervisor":"Jerry",
"number1":335.4,
"number2":33.3,
"number3":11.6
},
{
"measure":"value",
"region":"London",
"manager":"John",
"supervisor":"Joseph",
"number1":444.3,
"number2":233,
"number3":1561.6
}
]
我试图通过角操纵数据。
[
{
"region": "London",
"regionTotals" : {
"turnover" : {
"number1" : "TOTAL OF NUMBER 1 WITH REGION LONDON",
"number2" : "TOTAL OF NUMBER 2 WITH REGION LONDON",
"number3" : "TOTAL OF NUMBER 3 WITH REGION LONDON"
}
},
"managers" : {
"jack" : {
"managerTotals" {
"number1": "TOTAL OF NUMBER 1 WITH MANAGER JACK",
"number2": "TOTAL OF NUMBER 2 WITH MANAGER JACK",
"number3": "TOTAL OF NUMBER 3 WITH MANAGER JACK"
},
"supervisors" : {
"Jerry": {
"supervisorTotals" : {
"number1":335.4,
"number2":33.3,
"number3":11.6
}
},
"James": {
"supervisorTotals" : {
"number1":44,
"number2":2244.3,
"number3":1561.6
}
}
}
},
"john" : {
"managerTotals" {
"number1": "TOTAL OF NUMBER 1 WITH MANAGER JOHN",
"number2": "TOTAL OF NUMBER 2 WITH MANAGER JOHN",
"number3": "TOTAL OF NUMBER 3 WITH MANAGER JOHN"
},
"supervisors" : {
"Joseph": {
"supervisorTotals" : {
"number1":444.3,
"number2":233,
"number3":1561.6
}
}
}
}
}
}
]
这是最好的方法吗?如果你对如何通过javascript循环运行它有任何建议,我将不胜感激,因为我正在努力。尤其是设置对象键。
我能想到的唯一另一种方法是在节点中运行一堆查询,并将其放在服务器端而不是客户端。然而,考虑到我正在使用mssql,我希望将查询保持在最低限度。
谢谢
我不是说这是最好的解决方案,而是一个达到你目标的解决方案
我通过对.reduce
和angular.forEach
进行一定的迭代,将JSON
平铺成相应的结构。$scope.flattenedRecord
包含转换后的JSON
var app = angular.module('myApp', []);
app.controller('ArrayController', function ($scope) {
$scope.records = [{
"measure": "value",
"region": "London",
"manager": "Jack",
"supervisor": "James",
"number1": 44,
"number2": 2244.3,
"number3": 1561.6
}, {
"measure": "value",
"region": "London",
"manager": "Jack",
"supervisor": "Jerry",
"number1": 335.4,
"number2": 33.3,
"number3": 11.6
}, {
"measure": "value",
"region": "London",
"manager": "John",
"supervisor": "Joseph",
"number1": 444.3,
"number2": 233,
"number3": 1561.6
}];
$scope.flattenedRecord = [];
$scope.managers = [];
$scope.region = [];
$scope.records.reduce(function (result, item) {
$scope.managers.push(item.manager);
$scope.region.push(item.region);
}, 0);
$scope.managers = _.uniq($scope.managers);
$scope.region = _.uniq($scope.region);
var mainRecordobj = {};
angular.forEach($scope.region, function (regionValue) {
mainRecordobj.region = regionValue;
var regionTurnoverObj = {};
var regionNumberObj = {};
var regionTotalsObj = {};
var supervisorTotalsObj = {};
var supervisorNumberObj = {};
var supervisorNameObj = {};
var managerTotalsObj = {};
var managerNameObj = {};
var managerNumberObj = {};
regionNumberObj.number1 = "TOTAL OF NUMBER 1 WITH REGION " + regionValue.toUpperCase();
regionNumberObj.number2 = "TOTAL OF NUMBER 2 WITH REGION " + regionValue.toUpperCase();
regionNumberObj.number3 = "TOTAL OF NUMBER 3 WITH REGION " + regionValue.toUpperCase();
angular.forEach($scope.managers, function (managerName) {
managerNumberObj = {};
managerNumberObj.number1 = "TOTAL OF NUMBER 1 WITH MANAGER " + managerName.toUpperCase();
managerNumberObj.number2 = "TOTAL OF NUMBER 2 WITH MANAGER " + managerName.toUpperCase();
managerNumberObj.number3 = "TOTAL OF NUMBER 3 WITH MANAGER " + managerName.toUpperCase();
managerTotalsObj = {};
managerTotalsObj.managerTotals = managerNumberObj;
supervisorNameObj = {};
angular.forEach($scope.records, function (recordArray, recordIndex) {
if (managerName === recordArray.manager) {
angular.forEach(recordArray, function (recordValue, recordKey) {
if (recordValue === managerName) {
supervisorNumberObj = {};
supervisorNumberObj.number1 = recordArray.number1;
supervisorNumberObj.number2 = recordArray.number2;
supervisorNumberObj.number3 = recordArray.number3;
supervisorTotalsObj = {};
supervisorTotalsObj.supervisorTotals = supervisorNumberObj;
supervisorNameObj[recordArray.supervisor] = supervisorTotalsObj;
}
});
}
});
managerTotalsObj.supervisors = supervisorNameObj;
managerNameObj[managerName.toLowerCase()] = managerTotalsObj;
});
regionTurnoverObj.turnover = regionNumberObj;
mainRecordobj.regionTotals = regionTurnoverObj;
mainRecordobj.managers = managerNameObj;
$scope.flattenedRecord.push(mainRecordobj);
console.log(angular.toJson($scope.flattenedRecord));
});
});
[
{
"region": "London",
"regionTotals": {
"turnover": {
"number1": "TOTAL OF NUMBER 1 WITH REGION LONDON",
"number2": "TOTAL OF NUMBER 2 WITH REGION LONDON",
"number3": "TOTAL OF NUMBER 3 WITH REGION LONDON"
}
},
"managers": {
"jack": {
"managerTotals": {
"number1": "TOTAL OF NUMBER 1 WITH MANAGER JACK",
"number2": "TOTAL OF NUMBER 2 WITH MANAGER JACK",
"number3": "TOTAL OF NUMBER 3 WITH MANAGER JACK"
},
"supervisors": {
"James": {
"supervisorTotals": {
"number1": 44,
"number2": 2244.3,
"number3": 1561.6
}
},
"Jerry": {
"supervisorTotals": {
"number1": 335.4,
"number2": 33.3,
"number3": 11.6
}
}
}
},
"john": {
"managerTotals": {
"number1": "TOTAL OF NUMBER 1 WITH MANAGER JOHN",
"number2": "TOTAL OF NUMBER 2 WITH MANAGER JOHN",
"number3": "TOTAL OF NUMBER 3 WITH MANAGER JOHN"
},
"supervisors": {
"Joseph": {
"supervisorTotals": {
"number1": 444.3,
"number2": 233,
"number3": 1561.6
}
}
}
}
}
}
]
相关文章:
- 如何使用ng repeat中的选定输入更新我的对象
- 无法使用ng repeat检索动态创建的JSON对象的属性
- AngularJS:根据其他对象预先选择ng repeat中的select元素
- 角度控制器不绑定服务对象属性 ng-repeat
- 如何将 JSON 对象映射到 ng-repeat 中的折叠行
- 在angularjs ng-repeat指令中对对象进行排序
- ng-repeat不绑定ng-model对象数组
- 使用 ng-repeat解析不均匀数据/ json对象
- 使用Angular js ng repeat指令过滤json对象
- 如何将ng repeat中的当前对象传递给$mdDialog
- I'我正在努力学习Angular——为什么不;t我的对象没有用ng repeat出现
- 如何在ng repeat中比较两个不同的对象
- 使用ng repeat将表单元素绑定到角度中的新对象
- 角度在ng-repeat(MEAN-Stack)中传递错误的对象
- AngularJS ng-repeat对象,按对象过滤
- Angular JS嵌套的ng-repeat只有一个顶级对象
- 如何在 ng-repeat 中按键分配对象数组
- ng-repeat中的Angular Js对象过滤器
- Angular 什么是在 ng-repeat 指令中访问总对象的最佳方式
- AngularJS - ng-repeat,更新尚未定义的模型对象索引