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));