2017-12-30 12 views
0

Ich versuche, einen Wert von mehrdimensionalen Objekten mit JavaScript zu erhalten. Ich habe versucht, mit .filter, aber es scheint nur auf Arrays arbeiten. Außerdem habe ich es fast mit UnderscoreJS_where gemacht, aber es funktioniert nur mit nicht-multidimensionalen Objekten. Ist es überhaupt möglich, oder muss ich mein Objekt rekonstruieren? Ich werde für jeden Hinweis dankbar ... Bitte helfen: '(Wert aus mehrdimensionalem Objekt erhalten?

-Code (https://jsfiddle.net/ob58fye2/):

<!DOCTYPE html> 
<html> 
<head> 
    <script type="text/javascript"> 
var configurators = JSON.parse('{"ConfiguredItems":{"OtapiConfiguredItem":[{"Id":"3667395302656","Quantity":"2981","Configurators":{"ValuedConfigurator":[{"@attributes":{"Pid":"1627207","Vid":"3224419"}},{"@attributes":{"Pid":"20509","Vid":"28383"}}]}},{"Id":"3667395302655","Quantity":"4145","Configurators":{"ValuedConfigurator":[{"@attributes":{"Pid":"1627207","Vid":"129819"}},{"@attributes":{"Pid":"20509","Vid":"28383"}}]}},{"Id":"3667395302654","Quantity":"0","Configurators":{"ValuedConfigurator":[{"@attributes":{"Pid":"1627207","Vid":"80557"}},{"@attributes":{"Pid":"20509","Vid":"28383"}}]}}]}}'); 

function FindConfigurator(pid, vid) { 
    var id = null; 

    // 

    console.log(configurators); // Returns the configurators. 
    console.log(id); // Should return `3667395302656`. 
} 

FindConfigurator(1627207, 3224419); 
    </script> 
</head> 
</html> 

Antwort

0

Sie können Schleife über Ihre JSON-Arrays und erhalten das gewünschte Ergebnis

.

var configurators = JSON.parse('{"ConfiguredItems":{"OtapiConfiguredItem":[{"Id":"3667395302656","Quantity":"2981","Configurators":{"ValuedConfigurator":[{"@attributes":{"Pid":"1627207","Vid":"3224419"}},{"@attributes":{"Pid":"20509","Vid":"28383"}}]}},{"Id":"3667395302655","Quantity":"4145","Configurators":{"ValuedConfigurator":[{"@attributes":{"Pid":"1627207","Vid":"129819"}},{"@attributes":{"Pid":"20509","Vid":"28383"}}]}},{"Id":"3667395302654","Quantity":"0","Configurators":{"ValuedConfigurator":[{"@attributes":{"Pid":"1627207","Vid":"80557"}},{"@attributes":{"Pid":"20509","Vid":"28383"}}]}}]}}'); 
 

 
function FindConfigurator(pid, vid) { 
 
    var id = null; 
 
    configurators.ConfiguredItems.OtapiConfiguredItem.forEach(
 
    (OtapiConfiguredObj)=>{ 
 
    OtapiConfiguredObj.Configurators.ValuedConfigurator.forEach(
 
    (ValuedConfiguratorObj)=>{ 
 
    if(ValuedConfiguratorObj['@attributes'].Pid === pid.toString() && ValuedConfiguratorObj['@attributes'].Vid === vid.toString()){ 
 
     id = OtapiConfiguredObj.Id; 
 
    } 
 
    }); 
 
    }); 
 
    console.log(configurators); // Returns the configurators. 
 
    console.log(id); // Should return `3667395302656`. 
 
} 
 

 
FindConfigurator(1627207, 3224419);

Da können Sie keine break Anweisung in forEach hinzufügen können Sie eine allgemeine lo haben op, um dies zu tun, so dass, wenn das Spiel gefunden wird, die Schleife unterbrochen ist.

var configurators = JSON.parse('{"ConfiguredItems":{"OtapiConfiguredItem":[{"Id":"3667395302656","Quantity":"2981","Configurators":{"ValuedConfigurator":[{"@attributes":{"Pid":"1627207","Vid":"3224419"}},{"@attributes":{"Pid":"20509","Vid":"28383"}}]}},{"Id":"3667395302655","Quantity":"4145","Configurators":{"ValuedConfigurator":[{"@attributes":{"Pid":"1627207","Vid":"129819"}},{"@attributes":{"Pid":"20509","Vid":"28383"}}]}},{"Id":"3667395302654","Quantity":"0","Configurators":{"ValuedConfigurator":[{"@attributes":{"Pid":"1627207","Vid":"80557"}},{"@attributes":{"Pid":"20509","Vid":"28383"}}]}}]}}'); 
 

 
function FindConfigurator(pid, vid) { 
 
    var id = null; 
 
    for(var i=0; i<configurators.ConfiguredItems.OtapiConfiguredItem.length; i++){ 
 
    var OtapiConfiguredObj = configurators.ConfiguredItems.OtapiConfiguredItem[i]; 
 
    for(var j=0; j< OtapiConfiguredObj.Configurators.ValuedConfigurator.length; j++) { 
 
     var ValuedConfiguratorObj = OtapiConfiguredObj.Configurators.ValuedConfigurator[j]; 
 
     if(ValuedConfiguratorObj['@attributes'].Pid === pid.toString() && ValuedConfiguratorObj['@attributes'].Vid === vid.toString()){ 
 
     id = OtapiConfiguredObj.Id; 
 
     break; 
 
     } 
 
    } 
 
    if(id){break;} 
 
    } 
 
    console.log(configurators); // Returns the configurators. 
 
    console.log(id); // Should return `3667395302656`. 
 
} 
 

 
FindConfigurator(1627207, 3224419);

+0

Thank you !!! Es funktioniert perfekt! –

+0

@htorbov froh, Ihnen zu helfen. Vergiss nicht, grün zu markieren –

Verwandte Themen