javascript - 将 Javascript 对象转换为数组

标签 javascript jquery arrays json object

好吧,所以我面临这个挑战......

以下是 javascript 控制台(在 Chrome 中) 打印我的对象的方式:

enter image description here

这就是我想做的:

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/

相关文章:

javascript - 单个字段上的 Angular $filter

javascript - JS中字符串转换unicode?

javascript - 将 href url 更改为父 li 菜单中的 # 标签

jquery - 当页面加载鼠标悬停自动工作时

javascript - jquery addClass 和 removeClass 没有按预期工作

javascript - 如何根据其中字符串的长度修改 div 的长度?

java - 带有 JS 前端和 Java 后端的 Google API

arrays - Swift Dictionary<String , Array> 添加新键/值

c++ - 指向此对象的指针会创建什么?

ruby - 如何按电子邮件提供商对一系列电子邮件进行排序?