Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.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 用递归方法重构n级对象/数组_Javascript_Jquery - Fatal编程技术网

Javascript 用递归方法重构n级对象/数组

Javascript 用递归方法重构n级对象/数组,javascript,jquery,Javascript,Jquery,我有一个JavaScript对象,它包含很多属性。我需要创建另一个类似的层次结构,但我只需要几个属性 [ { _id: "559d0fcdd791e5c452345e80", name: "Books", lastUpdated: "2015-07-08T11:55:57.891Z", body: "", children: [ { _id: "559d0fd9d791e5c452345e81", name:

我有一个JavaScript对象,它包含很多属性。我需要创建另一个类似的层次结构,但我只需要几个属性

[
  {
    _id: "559d0fcdd791e5c452345e80",
    name: "Books",
   lastUpdated: "2015-07-08T11:55:57.891Z",

    body: "",
    children: [
      {
        _id: "559d0fd9d791e5c452345e81",
        name: "web apps",
        __v: 2,
        media: {
          images: [
          ]
        },
        lastUpdated: "2015-07-08T11:56:09.356Z",


        body: "",
        children: [
          {
            _id: "559d0fe9d791e5c452345e83",
            name: ".net",
            __v: 1,
            media: {
              images: [
              ]
            },
            lastUpdated: "2015-07-08T11:56:25.139Z",


            body: "",
            children: [
              {
                _id: "559d0ff2d791e5c452345e84",
                name: "asp.net",
                __v: 0,
                media: {
                  images: [
                  ]
                },
                lastUpdated: "2015-07-08T11:56:34.306Z",


                body: "",
                children: [
                ],
                parent: "559d0fe9d791e5c452345e83",
                description: ""
              }
            ],
            parent: "559d0fd9d791e5c452345e81",
            description: ""
          },
          {
            _id: "559d0ffad791e5c452345e85",
            name: "java",
            __v: 0,
            media: {
              images: [
              ]
            },
            lastUpdated: "2015-07-08T11:56:42.663Z",


            body: "",
            children: [
            ],
            parent: "559d0fd9d791e5c452345e81",
            description: ""
          }
        ],
        parent: "559d0fcdd791e5c452345e80",
        description: ""
      },
      {
        _id: "559d0fe0d791e5c452345e82",
        name: "db",
        __v: 2,
        media: {
          images: [
          ]
        },
        lastUpdated: "2015-07-08T11:56:16.436Z",


        body: "",
        children: [
          {
            _id: "559d1006d791e5c452345e86",
            name: "SQL server",
            __v: 0,
            media: {
              images: [
              ]
            },
            lastUpdated: "2015-07-08T11:56:54.289Z",


            body: "",
            children: [
            ],
            parent: "559d0fe0d791e5c452345e82",
            description: ""
          },
          {
            _id: "559d101ad791e5c452345e87",
            name: "NO SQL",
            __v: 1,
            media: {
              images: [
              ]
            },
            lastUpdated: "2015-07-08T11:57:14.988Z",


            body: "",
            children: [
              {
                _id: "559d1025d791e5c452345e88",
                name: "MongoDB",
                __v: 0,
                media: {
                  images: [
                  ]
                },
                lastUpdated: "2015-07-08T11:57:25.044Z",


                body: "",
                children: [
                ],
                parent: "559d101ad791e5c452345e87",
                description: ""
              }
            ],
            parent: "559d0fe0d791e5c452345e82",
            description: ""
          }
        ],
        parent: "559d0fcdd791e5c452345e80",
        description: ""
      }
    ],
    parent: null,
    description: "Some books"
  }
]
由此,我需要创建如下层次结构:

[{
  text: 'books',
  nodes: [{
    text:'web apps',
    nodes:[{
      text: '.net',
      nodes:[{
        text:'asp.net',
        nodes:[]
      }]
    },{
      text: 'java',
      nodes:[]
    }]
  },{
    text: 'DB',
    nodes: [{
      text: 'SQL Server'
    },{
      text: 'NO SQL',
      nodes:[{
        text: 'MongoDB'
      }]
    }]
  }]

}]

我试图创建一个递归循环,但不确定如何添加子节点。我怎样才能得到想要的结果

您需要一个递归函数。这是为您的特定数据输入而构建的:

function reduce (input, output) {
  output = [];
  $.each(input, function(key, val) {
    output[key] = {};
    output[key].text = val.name;
    output[key].nodes = reduce(val.children);
  });
  return output;
}
调用时使用
output=reduce(input)

下面是一个片段:

输入=[
{
_id:“559D0FCDD791E5C45345E80”,
名称:“书籍”,
最新更新:“2015-07-08T11:55:57.891Z”,
正文:“,
儿童:[
{
_id:“559D0FD9D791E5C45345E81”,
名称:“web应用程序”,
__五:二,,
媒体:{
图像:[
]
},
最新更新:“2015-07-08T11:56:09.356Z”,
正文:“,
儿童:[
{
_id:“559D0FE9D791E5C45345E83”,
名称:“.net”,
__五:一,,
媒体:{
图像:[
]
},
最新更新:“2015-07-08T11:56:25.139Z”,
正文:“,
儿童:[
{
_id:“559D0FF2D791E5C45345E84”,
名称:“asp.net”,
__v:0,
媒体:{
图像:[
]
},
最新更新:“2015-07-08T11:56:34.306Z”,
正文:“,
儿童:[
],
父项:“559D0FE9D791E5C45345E83”,
说明:“”
}
],
父项:“559D0FD9D791E5C45345E81”,
说明:“”
},
{
_id:“559D0FFAD791E5C45345E85”,
名称:“java”,
__v:0,
媒体:{
图像:[
]
},
最新更新:“2015-07-08T11:56:42.663Z”,
正文:“,
儿童:[
],
父项:“559D0FD9D791E5C45345E81”,
说明:“”
}
],
父项:“559D0FCDD791E5C45345E80”,
说明:“”
},
{
_id:“559D0FE0D791E5C45345E82”,
名称:“db”,
__五:二,,
媒体:{
图像:[
]
},
最新更新:“2015-07-08T11:56:16.436Z”,
正文:“,
儿童:[
{
_id:“559D1006D791E5C45345E86”,
名称:“SQL server”,
__v:0,
媒体:{
图像:[
]
},
最新更新:“2015-07-08T11:56:54.289Z”,
正文:“,
儿童:[
],
父项:“559D0FE0D791E5C45345E82”,
说明:“”
},
{
_id:“559D101AD791E5C45345E87”,
名称:“无SQL”,
__五:一,,
媒体:{
图像:[
]
},
最新更新:“2015-07-08T11:57:14.988Z”,
正文:“,
儿童:[
{
_id:“559D1025D791E5C45345E88”,
名称:“MongoDB”,
__v:0,
媒体:{
图像:[
]
},
最新更新:“2015-07-08T11:57:25.044Z”,
正文:“,
儿童:[
],
家长:“559D101AD791E5C45345E87”,
说明:“”
}
],
父项:“559D0FE0D791E5C45345E82”,
说明:“”
}
],
父项:“559D0FCDD791E5C45345E80”,
说明:“”
}
],
父项:null,
描述:“一些书”
}
]
功能减少(输入、输出){
输出=[];
$。每个(输入、功能(键、值){
输出[键]={};
输出[key]。text=val.name;
输出[key].nodes=reduce(val.children);
});
返回输出;
}
输出=减少(输入);
$('div').text(JSON.stringify(输出))