我有一个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(final);
stateObj["content"]["AdminFichiers"]["aPropos"]["administrateurs"]这是我最后得到的

为什么我到处都搞不清楚?
当我这么做
for(var i in final){console.log(stateObj["content"]["AdminFichiers"]["aPropos"]["administrateurs"]); }它将结果显示为对象。
我怎么跑?
stateObj["content"]["AdminFichiers"]["aPropos"]["administrateurs"]
论客体
发布于 2016-06-12 13:29:56
编辑:在重新渲染问题之后,使问题变得更清楚了。您需要一种将字符串"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)
}发布于 2016-06-12 13:23:03
因为您正在尝试访问一个没有对象属性的对象属性。您的finali将返回‘I’位置的一个字符,从上面打印的最后一个字符串开始。finali将返回一个字符,而不是一个对象。所以你不可能得到像finali这样的值
发布于 2016-06-12 13:22:38
之所以会发生这种情况,是因为当您在for-in循环中拆分nameSplit时,每个字母都对应于每个字符串。所以,只需使用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)
}希望它对你有用:)
这是jsFiddle
https://stackoverflow.com/questions/37774641
复制相似问题