如何将Javascript对象/JSON中的所有项分离到数组中
好的,这是Javascript对象/JSON:如何将Javascript对象/JSON中的所有项分离到数组中,javascript,jquery,json,Javascript,Jquery,Json,好的,这是Javascript对象/JSON: { "marco":{ "gender":"men", "age":29, "children":{ "jen":{ "gender":"women", "age":14 }, "marco jr.":{ "gender":"m
{
"marco":{
"gender":"men",
"age":29,
"children":{
"jen":{
"gender":"women",
"age":14
},
"marco jr.":{
"gender":"men",
"age":16,
"children":{
"Koos":{
"gender":"men",
"age":1
}
}
}
}
},
"lisa":{
"gender":"women",
"age":20
},
"mike":{
"gender":"men",
"age":32,
"children":{
"carl":{
"gender":"women",
"age":19
}
}
}
}
我希望,如果我选择marco,输出将是
["jen":{"gender":"women", "age":14}, "marco jr.":{"gender":"men", "age":16}, "Koos":{"gender":"men", "age":1}]
换句话说:一个具有多个图层的大对象需要被切成一个大数组。所以不再有三个物体了
我想不出任何解决方案。如果使用javascript搜索json对象,请使用json.parse函数 请看这一页
或者,如果您使用PHP使用json_decode方法将其转换为数组,您可以使用递归来实现这一点。当您匹配父级的名称时,您需要将true添加到递归的下一次迭代中,以便它知道要添加到结果中 var obj={marco:{性别:男性,年龄:29岁,儿童:{jen:{性别:女性,年龄:14},小marco:{性别:男性,年龄:16岁,儿童:{Koos:{性别:男性,年龄:1}}}},lisa:{性别:女性,年龄:20},mike:{性别:男性,年龄:32岁,儿童:{carl:{性别:女性,年龄:19}} 函数到ArrayData、名称、父级{ var结果=[]; 对于数据中的var i{ ifi==name | | parent==true{ ifi!=name result.push{[i]:{gender:data[i]。gender,age:data[i]。age} result=result.concatotorarydata[i]。子项,名称,true } result=result.concatotorarydata[i]。子项,名称,false } 返回结果; } console.logJSON.stringifytoArrayobj,'marco',false,0,4 console.logJSON.stringifytoArrayobj,'marco jr',false,0,4
console.logJSON.stringifytoArrayobj'mike',false,0,4这是一个适合递归函数的任务,因为您需要找到Marco的所有子函数,以及它们的所有子函数,依此类推。大概是这样的: 这实质上是展平嵌套对象,因此也可以看到前面的答案,例如
这是假设您希望返回一个以名称作为键的对象,而不是一个只能有索引号的数组。您确定要在数组中使用非数字键[jen:{?创建一个采用对象和键名的递归函数。使用子对象及其键递归调用。您的结果可能应该是一个对象,而不是其他人已经说过的数组。javascript中没有关联数组,只有索引数组。您可以在另一个stackoverflow问题中了解更多信息:。是的这只是将JSON转换为JS对象,但不是OP想要的方式。感谢您的响应,但正如@George所说,这不是我想要的。感谢这是我一直在寻找的东西!不知道我想展平嵌套对象。JSFIDLE看起来很有希望!现在尝试一下:所以我创建示例对象时犯了一个错误。可以吗请将您的代码调整到此数组:我尝试过这样做,但没有任何运气。。
function getDescendents(family, memberName) {
function inner(children, r) {
for (var k in children) {
if (children.hasOwnProperty(k)) {
r[k] = {
age: children[k].age,
gender: children[k].gender
};
inner(children[k].children, r);
}
}
}
var r = {};
inner(family[memberName].children, r);
return r;
}
console.log(getDescendents(family, 'marco'));