2017-12-30 44 views
0

JavaScript로 다차원 객체에서 값을 가져 오려고합니다. .filter으로 시도했지만 배열에서만 작동하는 것으로 보입니다. 또한, 나는 거의 UnderscoreJS_where을 사용했지만, 다차원 적이 아닌 객체에서만 작동합니다. 심지어 가능합니까, 아니면 객체를 재구성해야합니까? 내가 어떤 힌트를위한 감사합니다 ... 도와주세요 '(다차원 객체에서 값 가져 오기?

코드 (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> 

답변

0

할 수 있습니다 원하는 결과 귀하의 JSON 배열을 얻을 돌이

.

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

당신이 forEachbreak 문을 추가 할 수 있기 때문에 당신은 일반적으로 보라를 가질 수 있습니다 그렇게하면 일치가 발견되면 루프가 깨집니다.

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

감사합니다! 그것은 완벽하게 작동합니다! –

+0

@htorbov 당신을 도울 수있어서 기쁩니다. 녹색으로 표시하는 것을 잊지 마세요. –