2017-03-08 1 views
-1

한 데이터 구조에서 다른 데이터 구조로 변환하는 데 어려움을 겪고 있습니다. 나는이있어 :데이터 구조 변환을위한 루프

var obiekat={ 
      "drogi" : [ 
       { 
       "miasta" : ["A", "B"], 
       "czas_przejazdu" : 3 
       }, 
       { 
       "miasta" : ["A", "C"], 
       "czas_przejazdu" : 2 
       } 
      ], 
      "max_czas_przejazdu" :4 
      }; 

나는이 같은 내장 객체로 변환 할 :

var nodes_fire ={ 
       "A" : 
       {  
        "B":3 , 
        "C":2 

       }, 
       "B" : 
       { 
        "A":3   
       }, 
       "C" : 
       { 
        "A":2   
       } 
      }; 

나는 도로의 수에도 불구하고 변환해야합니다. 그런 기능을 어떻게 시작해야할지 모르겠다. 나는 많은 것을 시도했다. 아마도 틀렸다. 여기

내 코드입니다 :

<html> 
<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
</head> 
<body> 
<button>Click</button> 
<script> 
$(document).ready(function(){ 

    $('button').click(function(){ 
     var obiekat={ 
      "miasta" : [ 
       { 
       "nazwa" : "A", 
       "ma_jednostke" : true 
       }, 
       { 
       "nazwa" : "B", 
       "ma_jednostke" : true 
       } 
      ], 
      "drogi" : [ 
       { 
       "miasta" : ["A", "B"], 
       "czas_przejazdu" : 3 
       }, 
       { 
       "miasta" : ["A", "C"], 
       "czas_przejazdu" : 2 
       } 
      ], 
      "max_czas_przejazdu" :4 
      }; 

var nodes_fire = 
      { 
       "A" : 
       {  
        "B":1 , 
        "C":3 

       }, 
       "B" : 
       { 
        "A":2   
       }, 
       "C" : 
       { 
        "A":3   
       } 
      }; 
     var rnowy=[]; 
     var nowy={}; 
     var second_city,first_city,travel; 

     var ritem={}; 
     var item={}; 
     var summer1=[], 
      summer2=[]; 


     for (property in obiekat.drogi){ 
      var count = 0; 

      first_city=obiekat.drogi[property].miasta[0];  
      second_city=obiekat.drogi[property].miasta[1];  
      travel=obiekat.drogi[property].czas_przejazdu;  
      ritem[second_city]=obiekat.drogi[property].czas_przejazdu; 

      if(item.hasOwnProperty(first_city)){ 
       item[first_city]=ritem; 
      }else{ 
       item[first_city]=ritem; 
      } 

      rnowy.push(item); 
      count++; 
     } 
     $('#result').text(JSON.stringify(rnowy)); 

    }); 
}); 
    </script> 

<pre id="result"> 
</pre> 
</body> 
</html> 
+0

var object = { "roads": [{ "cities": ["A", "B"], "time": 3 }, { "cities": ["A", "C"], "time": 2 }] }; var result = object.roads.reduce(function(r, e) { e.cities.forEach(function(c) { if(!r[c]) r[c] = {} e.cities.forEach(function(n) { if(n != c) Object.assign(r[c], {[n]: e.time}) }) }) return r }, {}) console.log(result)
은 (http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/ [질문에는 JSON이 없습니다]) – Quentin

+0

디버깅을 돕기 전에 [mcve]를 제공해야합니다. – Quentin

답변

0

당신은 객체를 구축 reduce()를 사용할 수 있지만 당신은 루프 도시에 처음으로 내부의 두 forEach() 루프가 필요합니다 다음 다른 시간 같은 배열에서 다른 사람을 찾을 수 있지만에서 안 하나 외부 루프.

+0

고마워요! 그것은 매력처럼 작동합니다! 나는 그것이 10 줄의 코드에서 가능하다고 생각하지 않았다 : O – jacho29