【问题标题】:How to create a route Path from a Json Array in Javascript?如何在 Javascript 中从 Json 数组创建路由路径?
【发布时间】:2016-06-22 05:36:54
【问题描述】:

我有一个包含一些随机城市名称的数组,另一个包含单个城市的源和目的地的 json 对象数组,但是这个单个城市的路线数组不是按顺序排列的。我需要按照他们访问的顺序进行,我无法制定逻辑..请帮助..

城市数组(动态大小):

var CITIES = ["PARIS","LONDON","DELHI","SINGAPORE","DUBAI"]

路径的Json数组(随机序列):

var CITY_ROUTE = {"ROUTE":[
{"CURRENT_CITY":"PARIS","NEXT_CITY":"LONDON","PREVIOUS_CITY":"DUBAI",},
{"CURRENT_CITY":"DELHI","NEXT_CITY":"SINGAPORE","PREVIOUS_CITY":"LONDON"},
{"CURRENT_CITY":"LONDON","NEXT_CITY":"DELHI","PREVIOUS_CITY":"PARIS"},
{"CURRENT_CITY":"SINGAPORE","NEXT_CITY":"","PREVIOUS_CITY":"DELHI"},
{"CURRENT_CITY":"DUBAI","NEXT_CITY":"PARIS","PREVIOUS_CITY":""}
]};

/Required to Rearange the Json Object in Visiting sequence where Starting City will have null PREVIOUS_CITY value and Last City will have null  NEXT_CITY Value/


var CITY_ROUTE_IN_SEQUENCE = {"ROUTE":[
{"CURRENT_CITY":"DUBAI","NEXT_CITY":"PARIS","PREVIOUS_CITY":""}
{"CURRENT_CITY":"PARIS","NEXT_CITY":"LONDON","PREVIOUS_CITY":"DUBAI",},
{"CURRENT_CITY":"LONDON","NEXT_CITY":"DELHI","PREVIOUS_CITY":"PARIS"},
{"CURRENT_CITY":"DELHI","NEXT_CITY":"SINGAPORE","PREVIOUS_CITY":"LONDON"},
{"CURRENT_CITY":"SINGAPORE","NEXT_CITY":"","PREVIOUS_CITY":"DELHI"}
]};

【问题讨论】:

  • 好吧,似乎有一个空的PREVIOUS_CITY 属性的条目需要放在第一位。然后您可以简单地将它们基于NEXT_CITY 链接在一起。 (如果数据可能有循环,这是一个更难的问题,但我在这里看不到。)

标签: javascript json data-structures


【解决方案1】:

var CITY_ROUTE = {
    "ROUTE": [
        {"CURRENT_CITY":"PARIS","NEXT_CITY":"LONDON","PREVIOUS_CITY":"DUBAI",},
        {"CURRENT_CITY":"DELHI","NEXT_CITY":"SINGAPORE","PREVIOUS_CITY":"LONDON"},
        {"CURRENT_CITY":"LONDON","NEXT_CITY":"DELHI","PREVIOUS_CITY":"PARIS"},
        {"CURRENT_CITY":"SINGAPORE","NEXT_CITY":"","PREVIOUS_CITY":"DELHI"},
        {"CURRENT_CITY":"DUBAI","NEXT_CITY":"PARIS","PREVIOUS_CITY":""}
    ]
};

var map = {};
var point = '';
CITY_ROUTE.ROUTE.forEach(r => {
    map[r.CURRENT_CITY] = r;
    if (!r.PREVIOUS_CITY) {
        point = r.CURRENT_CITY;
    }
});

CITY_ROUTE.ROUTE = [];
while(point) {
    CITY_ROUTE.ROUTE.push(map[point]);
    point = map[point].NEXT_CITY;
}
console.log(JSON.stringify(CITY_ROUTE));

【讨论】:

    【解决方案2】:

    你可以尝试链接列表形式的东西。第一个节点将包含 PREVIOUS_CITY 为空的城市,最后一个节点将 NEXT_CITY 为空。 ..

    第 1 个节点迪拜 -> 第 2 个巴黎 -> 第 3 个伦敦 -> 第 4 个德里 -> 第 5 个新加坡

    如果您需要检查上一个城市..您可以使用双向链表.. 有资源告诉你如何在JS中实现链表

    http://code.tutsplus.com/articles/data-structures-with-javascript-singly-linked-list-and-doubly-linked-list--cms-23392

    【讨论】:

      【解决方案3】:

      谢谢@TedHopp ...它效率不高,但在做工作..

      var SortedArray=[];
      var CITY_ROUTE = {"ROUTE":[
      {"CURRENT_CITY":"PARIS","NEXT_CITY":"LONDON","PREVIOUS_CITY":"DUBAI",},
      {"CURRENT_CITY":"DELHI","NEXT_CITY":"SINGAPORE","PREVIOUS_CITY":"LONDON"},
      {"CURRENT_CITY":"LONDON","NEXT_CITY":"DELHI","PREVIOUS_CITY":"PARIS"},
      {"CURRENT_CITY":"SINGAPORE","NEXT_CITY":"","PREVIOUS_CITY":"DELHI"},
      {"CURRENT_CITY":"DUBAI","NEXT_CITY":"PARIS","PREVIOUS_CITY":""}
      ]};
      
      for(var index in CITY_ROUTE.ROUTE)
      {
      	if(CITY_ROUTE.ROUTE[index].PREVIOUS_CITY == "")
        {
        var NextCity = CITY_ROUTE.ROUTE[index].NEXT_CITY;
        SortedArray.push(CITY_ROUTE.ROUTE[index])
        CITY_ROUTE.ROUTE.splice(index,1);
          while(CITY_ROUTE.ROUTE.length>0)
          {
          		for(var i in CITY_ROUTE.ROUTE)
      				{
              	if(CITY_ROUTE.ROUTE[i].CURRENT_CITY === NextCity)
                {
                SortedArray.push(CITY_ROUTE.ROUTE[i])
                NextCity = CITY_ROUTE.ROUTE[i].NEXT_CITY;
                CITY_ROUTE.ROUTE.splice(i,1);
                }
              }			
          }
        }
      }
      console.log(SortedArray.length)
      console.log(CITY_ROUTE.ROUTE.push(SortedArray))
      console.log(JSON.stringify(CITY_ROUTE.ROUTE))

      【讨论】:

        【解决方案4】:

        试试这个 $.ajax({

        type: "POST",
        url: "<?php print $this->Url ?>index.php/employee/addemployee/viewrole,//your URL
        
        data: {'CITY_ROUTE': CITY_ROUTE,'CITY_ROUTE_IN_SEQUENCE',CITY_ROUTE_IN_SEQUENCE},
        success: function (response) {
        var data = jQuery.parseJSON(response);
        
        }
        
                                                                                }
                                                                            });
        

        【讨论】:

          猜你喜欢
          • 2020-11-20
          • 1970-01-01
          • 2017-07-14
          • 2020-08-05
          • 2021-03-02
          • 2018-03-08
          • 2017-10-09
          • 1970-01-01
          • 2021-03-21
          相关资源
          最近更新 更多