2017-03-08 71 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

[有在问题没有JSON(http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/ ) – Quentin

+0

在我们可以帮助您调试之前,您需要提供[mcve]。 – Quentin

回答

0

您可以使用reduce()打造的对象,但是你需要先内的两个forEach()环路,环路城市,然后其他时间找人在同一阵列而不是从一个外环。

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)

+0

谢谢!它像一个魅力!我不认为有可能在10行代码中做到这一点:O – jacho29