因此,我对JS和使用循环从平面文件获得JSON树中的数据格式化非常陌生. 我正在try 构建一个SAP UI5应用程序,并将数据加载到树表中.
我有这个数据
roles: [
{ role: 'JLP', desc: "jlp role", query:"q1" },
{ role: 'JLP', desc: "jlp role", query:"q2" },
{ role: 'JLP', desc: "jlp role", query:"q3" },
{ role: 'DJF', desc: "djf role", query:"q1" },
{ role: 'DJF', desc: "djf role", query:"q2" },
{ role: 'CJ', desc: "CJ role", query:"q1" }
]
我正试图将其纳入基于角色的 struct 中
{
"roles": [
{
"rolename": "JLP",
"properties": [
{
"role": "JLP",
"desc": "jlp role",
"query": "q1"
},
{
"role": "JLP",
"desc": "jlp role",
"query": "q2"
},
{
"role": "JLP",
"desc": "jlp role",
"query": "q3"
}
]
},
{
"rolename": "DJF",
"properties": [
{
"role": "DJF",
"desc": "djf role",
"query": "q1"
},
{
"role": "DJF",
"desc": "djf role",
"query": "q2"
}
]
},
{
"rolename": "CJ",
"properties": [
{
"role": "CJ",
"desc": "cj role",
"query": "q1"
}
]
}
]
}
我首先构建角色 struct ,并创建总体数据 struct :
buildData:function(o){
//find all types of roles
var unique= [];
for(i = 0; i < o.length; i++){
var rolename = o[i].role;
if(unique.indexOf(rolename)< 0) unique.push(rolename);
}
//create data structure
var datForm ={results:{roles:[]}};
var prop = {rolename:"",
properties:[]};
unique.forEach(function(a,index){
prop.rolename = a
datForm.results.roles.push(prop)
prop = {rolename:"",
properties:[]};
});
当我试图遍历数据时,我不得不对数组段进行硬编码,而当我try 使用‘i’时,这是不起作用的.我不清楚,当数据与先前创建的数据 struct 中的角色匹配时,我到底需要做些什么才能让数据推送段.
for(i = 0; i < o.length; i++){
var current = o[i].role;
var segment = o[i];
if(current === datForm.results.roles[0].rolename)
datForm.results.roles[0].properties.push(segment)
if(current === datForm.results.roles[1].rolename)
datForm.results.roles[1].properties.push(segment)
if(current === datForm.results.roles[2].rolename)
datForm.results.roles[2].properties.push(segment)
}
//console.log(datForm)
var oModel = this.getView().getModel();
oModel.setData(datForm)
this.getView().byId("TreeTableBasic").bindRows("/results")
这是可行的,但如果我使用的数据具有更少或更多的角色,它基本上会中断,不会起作用.你能推荐一个更好的方法吗?谢谢! 以下是我正在处理的示例:https://jsbin.com/kovevej/edit?html,js,output