循环进行数据结构转换

时间:2017-03-08 21:37:09

标签: javascript

我正在努力从一种数据结构转换到另一种数据结构。 我有这个:

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>

1 个答案:

答案 0 :(得分: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)