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