JavaScript递归函数的问题
我有一个嵌套对象的对象。我需要将所有子对象中的所有键和值放到一个数组中 所以我试着用递归函数来做,但我猜我做错了什么 对象:JavaScript递归函数的问题,javascript,recursion,Javascript,Recursion,我有一个嵌套对象的对象。我需要将所有子对象中的所有键和值放到一个数组中 所以我试着用递归函数来做,但我猜我做错了什么 对象: var jsonobj = { "gender": "male", "country": "us", "phone": "06 12 34 56 78", "enterprise": { "parameters": { "company": "foo", "companyID": "12345678912345",
var jsonobj = {
"gender": "male",
"country": "us",
"phone": "06 12 34 56 78",
"enterprise": {
"parameters": {
"company": "foo",
"companyID": "12345678912345",
"address": "adress principale",
}
},
"contacts": [],
"requirements": []
}
以下是函数:
function check(arr){
var val = '';
$.each(arr, function(k, v) {
if (typeof v == "object" && v.length !== 0) {
val = check(v);
}
});
return val;
}
这是使用它的函数:
function rec_res(obj_res) {
var foo=[];
$.each(jsonobj, function(k, v) {
if (typeof v == "object" && v.length !== 0) {
g = check(jsonobj); // calling the function
foo.push(g);
} else {
foo.push(v);
}
});
console.log(foo);
};
预期产出:
[foo:{
"gender": "male",
"country": "us",
"phone": "06 12 34 56 78",
"company": "foo",
"companyID": "12345678912345",
"address": "adress principale",
}]
您可以使用
Object.keys()
和reduce()
方法创建递归函数
var jsonobj={
“性别”:“男性”,
“国家”:“美国”,
“电话”:“0612345678”,
“企业”:{
“参数”:{
“公司”:“富”,
“公司ID”:“12345678912345”,
“地址”:“主要地址”,
}
},
“联系人”:[],
“要求”:[]
}
功能记录(obj){
返回Object.keys(obj).reduce((r,e)=>{
如果(对象的类型)==“对象”)对象。分配(r,rec_res(对象[e]))
否则r[e]=obj[e];
返回r;
}, {})
}
log(rec_res(jsonobj))
您没有说明问题所在。请把它添加到问题中。你的期望是什么output@zabusa我已经更新了question@FedericoklezCulloca谢谢-再次检查-函数给我错误超过的最大调用堆栈大小jsonobj
似乎是一个全局变量,您可能指的是$。每个(obj,…)
抱歉-我无法实现它,需要它是本机的。。。。你知道为什么我的不行吗?你说的本地人是什么意思?
var jsonobj = {
"gender": "male",
"country": "us",
"phone": "06 12 34 56 78",
"enterprise": {
"parameters": {
"company": "foo",
"companyID": "12345678912345",
"address": "adress principale",
}
},
"contacts": [],
"requirements": []
}
var result=[];
function rec_res(obj_res) {
var foo=[];
$.each(Object.keys(obj_res), function(k, v) {
if (typeof obj_res[v] == "object") {
var data = rec_res(obj_res[v]);
if(data!=undefined && data.length!=0){
data.map(function(d){
result.push(d);
});
}
} else {
result.push({[v]:obj_res[v]});
foo.push({[v]:obj_res[v]});
}
return foo;
});
//console.log(foo);
};
rec_res(jsonobj);
alert(JSON.stringify(result));