好吧,所以我面临这个挑战......
以下是 javascript 控制台(在 Chrome 中) 打印我的对象的方式:
这就是我想做的:
var items = [
{
text: "http://www.imdb.com/title/tt0106307/",
children: [
{ text: "Director", children: [ { text: "Emir Kusturica" } ] },
{ text: "Title", children: [ { text: "Arizona Dream" } ] }
]
},
{
text: "http://www.imdb.com/title/tt0110074/",
children: [
{ text: "Director", children: [ { text: "Joel Coen" }, { text: "Ethan Coen"} ] },
{ text: "Title", children: [ { text:"The Hudsucker Proxy" } ] }
]
}
// and so on..
];
我怎样才能做到这一点?有什么想法/指示可以帮助我实现目标吗?
它绝对应该相当简单,但 Javascript 绝对不是我的菜......
<小时/>P.S. 这整个对象是在 $.parseJSON(myJson)
命令之后创建的 - 现在,不要问我为什么它不转换为简单的嵌套数组它变成了一个对象...我希望我知道...(并不是说它具有所需的结构,但至少它会更有意义)
更新:
好的,如果有帮助的话,这是我原来的 Json :
{
"http:\/\/www.imdb.com\/title\/tt0106307\/": {
"Title": "Arizona Dream",
"Year": null,
"Director": "Emir Kusturica"
},
"http:\/\/www.imdb.com\/title\/tt0112883\/?ref_=tt_rec_tt": {
"Title": "Don Juan de Marco",
"Year": null,
"Director": "Jeremy Leven"
},
"http:\/\/www.imdb.com\/title\/tt0106387\/?ref_=tt_rec_tt": {
"Title": "Benny & Joon",
"Year": null,
"Director": "Jeremiah S. Chechik"
},
"http:\/\/www.imdb.com\/title\/tt0099487\/?ref_=tt_rec_tt": {
"Title": "\u039f \u03a8\u03b1\u03bb\u03b9\u03b4\u03bf\u03c7\u03ad\u03c1\u03b7\u03c2",
"Year": null,
"Director": "Tim Burton"
},
"http:\/\/www.imdb.com\/title\/tt0354899\/?ref_=tt_rec_tt": {
"Title": "La science des r\u00eaves",
"Year": null,
"Director": "Michel Gondry"
},
"http:\/\/www.imdb.com\/title\/tt0110074\/?ref_=tt_rec_tt": {
"Title": "The Hudsucker Proxy",
"Year": null,
"Director": [
"Joel Coen",
"Ethan Coen"
]
}
}
附注(2) 我实际上想做的是简单地使用 jsTree 将 Json 对象表示为树。 ,并插入自己实现其理想的结构。
最佳答案
在 ES5 中(如果支持 IE 8,则需要垫片):
function transformToTextNodeTree(obj) {
return Object.keys(obj).map(function(key) {
var result = { text: key };
if (Array.isArray(obj[key]) {
result.children = obj[key].map(transformToTextNodeTree);
} else if (typeof obj[key] === "object" && !(obj[key] == null)) {
result.children = transformToTextNodeTree(obj[key]);
} else {
result.children = [createTextNode(obj[key])];
}
return result;
})
}
function createTextNode(val) {
return { text: val };
}
那么它在做什么?
首先,我们使用 Object.keys
创建一个包含传入对象的所有 ownProperties
的数组。然后,我们映射
所得到的key
值数组,并将它们转换为{text, [...children]}
形式的对象。
我们的映射函数的实际核心是一个递归函数(当遇到数组或对象时它会调用自身),它将键映射到结果对象的 text
字段,并映射任何子项添加到 children
字段(并且,如前所述,它以递归方式执行此操作)。
关于javascript - 将 Javascript 对象转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21659428/