2017-12-05 10 views
1

オブジェクトがネストされています。すべてのサブオブジェクトからすべてのキーと値を1つの配列に取得する必要があります。機能をここでJavaScript再帰関数に関する問題

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", 
}] 

Fiddle

+0

あなたは問題が何であるかを述べるませんでした。質問に追加してください。 –

+1

あなたの期待される出力は何ですか? – zabusa

+0

@zabusa質問を更新しました – RoyBarOn

答えて

1

あなたはObject.keys()reduce()方法で再帰関数を作成することができます。

var jsonobj = { 
 
    "gender": "male", 
 
    "country": "us", 
 
    "phone": "06 12 34 56 78", 
 
    "enterprise": { 
 
    "parameters": { 
 
     "company": "foo", 
 
     "companyID": "12345678912345", 
 
     "address": "adress principale", 
 
    } 
 
    }, 
 
    "contacts": [], 
 
    "requirements": [] 
 
} 
 

 
function rec_res(obj) { 
 
    return Object.keys(obj).reduce((r, e) => { 
 
    if(typeof obj[e] == 'object') Object.assign(r, rec_res(obj[e])) 
 
    else r[e] = obj[e]; 
 
    return r; 
 
    }, {}) 
 
} 
 

 
console.log(rec_res(jsonobj))

+0

ありがとう!働いて – RoyBarOn

+0

ようこそ。 –

+0

申し訳ありません - 私はそれを実装することはできません。ネイティブである必要があります....私の考え方は何ですか? – RoyBarOn

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