Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Javascript对象转换为数组_Javascript_Jquery_Arrays_Json_Object - Fatal编程技术网

将Javascript对象转换为数组

将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"

好的,所以我要面对这个挑战

以下是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..
];
{
    "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(“”);
其中是json的字符串版本

可能我看错了您的问题,因此请在ES5中给出反馈(如果支持IE 8,则需要垫片):

那么它在做什么呢? 首先,我们使用
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
。可能有许多不同的,并且有无限的嵌套。所以,这显然是一个过于局部化的解决方案。