2017-12-05 4 views
1

Ich habe ein Objekt mit verschachtelten Objekten. Ich muss alle Schlüssel und Werte von allen Unterobjekten in ein Array bekommen.Problem mit JavaScript rekursive Funktion

Also ich versuche es mit einer rekursiven Funktion zu tun, aber ich denke, ich bin etwas falsch ...

Das Objekt tun:

var jsonobj = { 

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

Hier ist die Funktion:

function check(arr){ 
     var val = ''; 
     $.each(arr, function(k, v) { 
      if (typeof v == "object" && v.length !== 0) { 
       val = check(v); 
      } 
     }); 

     return val; 
} 

Und dies ist die Funktion, die sie mit:

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

Erwartete Ausgabe:

[foo:{ 
    "gender": "male", 
    "country": "us", 
    "phone": "06 12 34 56 78", 
    "company": "foo", 
    "companyID": "12345678912345", 
    "address": "adress principale", 
}] 

Fiddle

+0

Sie erklären nicht, was das Problem ist. Bitte fügen Sie es der Frage hinzu. –

+1

was ist Ihre erwartete Ausgabe – zabusa

+0

@zabusa Ich habe die Frage – RoyBarOn

Antwort

1

Sie rekursive Funktion mit Object.keys() und reduce() Methoden erstellen können.

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

Vielen Dank! Arbeiten – RoyBarOn

+0

Gern geschehen. –

+0

Sorry - ich kann es nicht implementieren, muss es nativ sein .... irgendeine Idee, warum meins nicht funktioniert? – 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));