Javascript 将嵌套对象数组转换为类似JSON的对象?
我在很多地方都找过这个,但找不到类似的东西。我需要像这样变换嵌套的Javascript 将嵌套对象数组转换为类似JSON的对象?,javascript,arrays,object,dictionary,nested,Javascript,Arrays,Object,Dictionary,Nested,我在很多地方都找过这个,但找不到类似的东西。我需要像这样变换嵌套的对象的数组: var currentArr = [ { name: 'Michael', children: ['Lara'] }, { name: 'Susy', children: ['Mike','Ana','Mary'] }, { name: 'Bruno', children: ['Clark'] } ] 进入一个JSON对象,如下所示: var re
对象的数组
:
var currentArr = [
{ name: 'Michael',
children: ['Lara']
},
{ name: 'Susy',
children: ['Mike','Ana','Mary']
},
{ name: 'Bruno',
children: ['Clark']
}
]
进入一个JSON
对象,如下所示:
var result = [
{ 'name' : 'Michael',
'children': [
{ 'name' : 'Lara' }
},
{ 'name' : 'Susy',
'children': [
{ 'name' : 'Mike' },
{ 'name' : 'Ana' },
{ 'name' : 'Mary' }
]
},
{ 'name' : 'Bruno',
'children': [
{ 'name' : 'Clark' }
]
}
]
我尝试过使用reduce
,map
nested,但我一直无法让它按照我想要的方式构建。特别是当从子对象
循环字符串数组时,我需要返回一个映射结果,其中名称
作为键
它需要嵌套为结果
,而currentArr
将是入口点
var currentObj=[
{姓名:'迈克尔',
儿童:[“劳拉”]
},
{名称:'Susy',
孩子:[“迈克”、“安娜”、“玛丽”]
},
{名称:'布鲁诺',
儿童:[“克拉克”]
}
]
对于(var i=0,j=currentObj.length;i您可以映射每个子数组并返回一个新对象
var currentObj=[
{姓名:'迈克尔',
儿童:[“劳拉”]
},
{名称:'Susy',
孩子:[“迈克”、“安娜”、“玛丽”]
},
{名称:'布鲁诺',
儿童:[“克拉克”]
}
].map(功能(项目){
item.children=item.children.map(函数(子函数){
返回{name:child};
});
退货项目;
});
console.log(currentObj);
这样原始数组就不会被修改:
var result = current.map(function (parent) {
return {
name: parent.name,
children: parent.children.map(function (name) {
return { name: name };
})
};
});
// if you want a JSON string representing the result object
var resultJSON = JSON.stringify(result);
另外,正如其他人所指出的,原始代码片段中的resultObj
不是有效的对象。也许您是想让它成为一个数组?如果可以就地修改当前数组,此ES2015代码就足够了:
currentArr.forEach(function(p) {
p.children = p.children.map(name => ({ name }));
});
arrow函数的返回值利用了新的ES2015语法,即对象文字中没有值的裸键取该名称变量的当前值,即,它与写入{“name”:name}
为了防止大括号被解释为函数体而不是对象文字,需要附加括号。我会这样做:
var result = [
{ 'name' : 'Michael',
'children': [
{ 'name' : 'Lara' }
},
{ 'name' : 'Susy',
'children': [
{ 'name' : 'Mike' },
{ 'name' : 'Ana' },
{ 'name' : 'Mary' }
]
},
{ 'name' : 'Bruno',
'children': [
{ 'name' : 'Clark' }
]
}
]
var currentArr=[{name:'Michael',children:['Lara']},{name:'Susy',children:['Mike','Ana','Mary']},{name:'Bruno',children:['Clark']}]
const map=data=>data.map(父=>(
parent.children.map(
child=>({name:child})),父
))
log(JSON.stringify(map(currentArr),null,4))
resultObj
应该是一个数组,对吗?这不是一个有效的JSON对象。对象的元素是key:value
对,但顶级对象没有任何键。另外,这不是JSON——JSON是一个符号,你不遵守它。任何人如果认为他们现在能够回答这个问题,都不能,因为OP要求的输出是不可能的。@JuanMendes查看编辑历史记录。他最初在数组中有{}
,而不是[]
。在这个上下文中谈论JSON是令人困惑的,因为JSON是一种符号,这里我们处理的是对象。