将Javascript对象转换为数组
好的,所以我要面对这个挑战 以下是javascript控制台(在Chrome中)如何打印我的对象:将Javascript对象转换为数组,javascript,jquery,arrays,json,object,Javascript,Jquery,Arrays,Json,Object,好的,所以我要面对这个挑战 以下是javascript控制台(在Chrome中)如何打印我的对象: var items = [ { text: "http://www.imdb.com/title/tt0106307/", children: [ { text: "Director", children: [ { text: "Emir Kusturica" } ] }, { text: "Title"
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..
];
{
"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"
]
}
}
下面是我想做的:
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..
];
{
"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"
]
}
}
我该怎么做?有什么想法/建议可以帮助我到达那里吗
它应该非常简单,但Javascript绝对不是我的拿手好戏
p.S.整个对象是在
$.parseJSON(myJson)
命令之后创建的-现在,不要问我为什么它没有转换为简单的嵌套数组,而是转换为对象。。。我希望我知道。。。(并不是说它会有理想的结构,但至少会更有意义)
更新:
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..
];
{
"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"
]
}
}
好的,如果有帮助的话,这是我的原始Json:
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..
];
{
"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"
]
}
}
p.S.(2)我实际上想做的是简单地将Json对象表示为一个树,并努力实现它所需的结构。我可能错了,但我相信Json是内置在javascript中的。你应该能够说:
var object = eval("<jsoncode>");
var object=eval(“”);
其中object.keys
创建一个数组,其中包含所传入对象的所有ownProperties
。然后,我们将映射得到的键值数组,并将它们转换为{text,[…children]}
形式的对象
映射函数的实际核心是一个递归函数(当它遇到数组或对象时调用自己),它将键映射到结果对象的
文本
字段,并将所有子项映射到子项
字段(如前所述,它递归地执行此操作)。解析JSON后,您可以尝试以下方法:
var movieArr = [];
$.each(data, function(index, value) {
var movie = {
text: index,
children: [
{ text: "Director", children: [ { text: value.Director } ] },
{ text: "Title", children: [ { text: value.Title } ] }
]
};
arr.push(movie)
});
试试这个:
// json - source JSON;
var result = [];
for (var url in json) {
var el = json[url];
var kids = [];
for (var prop in el) {
var v = el[prop];
if (!v.length) v = [v];
var subkids = [];
for (var i in v) subkids.push({text: v[i]});
kids.push({text: prop, children: subkids});
}
result.push({text: url, children: kids});
}
好的,下面是我是如何做到这一点的-受你答案的启发:-)
是的,这很有效 我尝试了一个
var items=transformToTextNodeTree($.parseJSON(myJson))
并抛出一个未捕获的TypeError:Object.keys调用非Object
错误。。。有什么想法吗?(错误指向Object.keys(obj)
部分。@Dr.Kameleon-我没有处理null
-现在已修复:-)子字段不一定是Director
和Title
。可能有许多不同的,并且有无限的嵌套。所以,这显然是一个过于局部化的解决方案。