我有一个JSON对象
stateObj:{
template: {
cache:false,
ref :"templates/pages/menu",
searchability: true,
path: "content.AdminFichiers.aPropos.administrateurs",
lastUpdate: "Dernières mises à jour"
}
}
我称之为
updatedata (stateObj.template.path);
更新容器的功能如下所示
function updatedata (dataObj){
var final = "stateObj",
nameSplit = dataObj.split("."),
uls = document.createElement("ul");
for(i in nameSplit) {
final += '["' + nameSplit[i] +'"]'
}
console.log(final);
for(var i in final){
console.log(stateObj["content"]["AdminFichiers"]["aPropos"]["administrateurs"]);//this shows me the object
console.log(final);//this shows me stateObj["content"]["AdminFichiers"]["aPropos"]["administrateurs"] but i want the object
uls.innerHTML += "<li class='col-3 inline-block card aliceblue fadeIn'><div>Prenom: "+final[i]["prenom"]+"</div><div>Nom: "+final[i]["nom"]+"</div><div>Tel: "+final[i]["tel"]+"</div><div>Mail: "+final[i]["mail"]+"</div><div> Localisation: "+i+"</div></li>"
}
contentElement.appendChild(uls)
}
这是 console.log(最终);
stateObj["content"]["AdminFichiers"]["aPropos"]["administrateurs"]
这是我最后得到的
为什么我到处都取消定义?
当我做的时候
for(var i in final){console.log(stateObj["content"]["AdminFichiers"]["aPropos"]["administrateurs"]); }
它将结果显示为对象。
我该怎么办
stateObj["content"]["AdminFichiers"]["aPropos"]["administrateurs"]
on object
答案 0 :(得分:2)
编辑:在重新回答问题后,您更清楚了。您想要一种方法将字符串"a[x][y][z]"
转换为它指向的实际Object
。
建议不要使用eval,你可以做的是:
Q = a
Q = Q[x]
(现在实际上是Q == a[x]
)Q = Q[y]
(Q == a[x][y]
)z
(Q == a[x][y][z]
)代码:
function updatedata (dataObj){
var nameSplit = dataObj.split("."),
uls = document.createElement("ul");
// Start from the root object, follow each given key
var final = stateObj;
for(var i = 0; i < nameSplit.length; ++i) {
var key = nameSplit[i];
final = final[key];
}
for(var i in final){
// This next part is wrong, your final Array is an one dimensional String array
// Accessing anything in the form of final[i][X] will not yield the result you are looking for
// What are you trying to output?
uls.innerHTML += "<li class='col-3 inline-block card aliceblue fadeIn'><div>Prenom: "+final[i]["prenom"]+"</div><div>Nom: "+final[i]["nom"]+"</div><div>Tel: "+final[i]["tel"]+"</div><div>Mail: "+final[i]["mail"]+"</div><div> Localisation: "+i+"</div></li>"
}
contentElement.appendChild(uls)
}
答案 1 :(得分:1)
它的发生是因为当您在for-in循环中拆分toString()
时,每个字母都会出现。因此,只需使用function updatedata (dataObj){
var final = "stateObj",
nameSplit = dataObj.split("."),
uls = document.createElement("ul");
classList(uls).add("row", "text-center");
for(i in nameSplit) {
final += ' ["' + nameSplit[i] +'"]'
}
final = final.toString().split(" ");
console.log(final);
for(var i in nameSplit){
uls.innerHTML += "<li class='col-3 inline-block card aliceblue fadeIn'><div>Prenom: "+final[i]["prenom"]+"</div><div>Nom: "+final[i]["nom"]+"</div><div>Tel: "+final[i]["tel"]+"</div><div>Mail: "+final[i]["mail"]+"</div><div> Localisation: "+i+"</div></li>"
}
contentElement.appendChild(uls)
}
函数即可使您的函数正常工作。
使用此代码:
{{1}}
希望它适合你:)
以下是Image showing the connections of the ButtonBarView and UIScrollView
答案 2 :(得分:1)
因为您尝试访问没有的对象属性。您的 final [i] 将从您上面打印的最终字符串中返回第i个位置的字符。 final [i] 将返回一个字符,而不是一个对象。所以你不可能最终获得像 final [i] [&#34; prenom&#34;]
这样的价值