1. 程式人生 > >json資料格式轉換成樹形狀態兩種方法

json資料格式轉換成樹形狀態兩種方法

var jsonData = [
  {"provname":"廣東","cityname":"深圳","localname":"羅田","deptname":"保險1","struid":"C0092","manager":"小飛","telephone":"020-110"},
  {"provname":"廣東","cityname":"深圳","localname":"福田","deptname":"保險2","struid":"C0092","manager":"小張","telephone":"020-110"},
  {"provname":"廣東","cityname":"深圳","localname":"福田","deptname":"保險3","struid":"C0092","manager":"小名","telephone":"020-110"},
  {"provname":"廣東","cityname":"東莞","localname":"厚街","deptname":"保險4","struid":"C0092","manager":"小飛","telephone":"020-110"},
  {"provname":"廣東","cityname":"廣州","localname":"白雲","deptname":"保險5","struid":"C0092","manager":"小張","telephone":"020-110"},
  {"provname":"廣東","cityname":"廣州","localname":"荔灣","deptname":"保險6","struid":"C0092","manager":"小張","telephone":"020-110"},
  {"provname":"廣東","cityname":"東莞","localname":"厚街","deptname":"保險7","struid":"C0092","manager":"小名","telephone":"020-110"},
  {"provname":"廣東","cityname":"惠州","localname":"厚街","deptname":"保險7","struid":"C0092","manager":"小名","telephone":"020-110"},
  {"provname":"廣東","cityname":"東莞","localname":"厚街","deptname":"保險7","struid":"C0092","manager":"小名","telephone":"020-110"},
  {"provname":"廣東","cityname":"惠州","localname":"厚街","deptname":"保險7","struid":"C0092","manager":"小名","telephone":"020-110"},
  {"provname":"廣東","cityname":"惠州","localname":"厚街","deptname":"保險7","struid":"C0092","manager":"小名","telephone":"020-110"}
]

1.第一種方式
/**
 * 轉換一維陣列為樹形陣列
 * @param  {Array} keys  樹形結構的參照key
 * @param  {Array} data  待轉換的原始資料
 * @return {Array}       轉換後的陣列
 * @api    private
 */
function translate (keys, data) {
  let [key, ...nextKeys] = keys
  let hasNextKey = nextKeys && nextKeys.length
  let map = {}

  data.forEach(item => {
    let k = item[key]
    if (k && !map[k]) {

      // 獲取源陣列中所有命中的`item`認為這些`item`為子項
      let childList = data.filter(item => item[key] === k).map(item => delete item[key] && item)
      map[k] = {
        [key]: k,
        list: hasNextKey ? translate(nextKeys, childList) : childList  // 如果還有用來分組的key,繼續執行,否則返回陣列
      }
    }
  })

  return Object.values(map)
}

let result = translate(['provname', 'cityname', 'localname'], jsonData)

console.log(result)

2.第二種方式
var provnameArr = [];
    var resultArr = [];
    $(function () {
        for (var i = 0, len = jsonData.length; i < len; i++) {
            var currData = jsonData[i];
            var provname = currData.provname || "";
			//處理省級資料
            var proObj = {};
            var proIndex = $.inArray(provname, provnameArr);
            if (proIndex == -1) {
                provnameArr.push(provname);
                proObj.provname = provname;
                proObj.citylist = [];
				resultArr.push(proObj);
            } else {
                proObj = resultArr[proIndex];
            }
			//處理市級資料
            var cityname = currData.cityname || "";
			var cityObj = getCityObjByCityName(cityname,proObj);           
            if (!cityObj) {
				cityObj = {};
                cityObj.cityname = cityname;
                cityObj.citylists = [];
				proObj.citylist.push(cityObj);
            } 
			//處理區級資料
			var localname = currData.localname || "";
			var localnameObj = getLocalObjByLocalName(localname,cityObj);
			if (!localnameObj) {
				localnameObj = {};
				localnameObj.localname = localname;
				localnameObj.localnames = [];
				cityObj.citylists.push(localnameObj);
			}
            var infoObj = {             
                "longitude": currData.longitude,
                "latitude": currData.latitude,
                "deptname": currData.deptname,
                "struid":currData.struid,
                "manager": currData.manager,
                "telephone": currData.telephone,
                "pickupaddr":currData.pickupaddr,
                "pickupcall":currData.pickupcall
            };
            localnameObj.localnames.push(infoObj);
        }
    });
	
	//根據city名找到city級資料
	function getCityObjByCityName(cityName,proObj){
		var citylist = proObj.citylist;
		var cityObj = null;
		for(var i = 0; i < citylist.length; i++){
			var currData = citylist[i];
			var currName = currData.cityname;
			if(cityName == currName){
				cityObj = currData;
				break;
			}
		}
		return cityObj;
	}
	
	//根據區名找到區級資料
	function getLocalObjByLocalName(localName,cityObj){
		var citylists = cityObj.citylists;
		var localnameObj = null;
		for(var i = 0; i < citylists.length; i++){
			var currData = citylists[i];
			var currName = currData.localname;
			if(localName == currName){
				localnameObj = currData;
				break;
			}
		}
		return localnameObj;
	}
console.log(resultArr);


相關推薦

json資料格式轉換樹形狀態方法

var jsonData = [ {"provname":"廣東","cityname":"深圳","localname":"羅田","deptname":"保險1","struid":"C0092","manager":"小飛","telephone":"020-11

將資原始檔的圖片轉換bitmap 的方法

 1.Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.mingchuseal, newOpts);         //本地資源轉換成bitmap 2.Drawable

json轉換time的方式

//yyyy-MM-dd function JsonToDate(jsondate) {     var date = new Date(parseInt(jsondate.replace("/Date(", "").replace(")/", ""), 10));    

一些json資料格式轉換的例子

question1:後臺接受到前臺的json格式的字串怎麼處理?public static void jsonToJAVA() { System.out.println("json字串轉java程式碼"); String jsonStr = "{\"password\":\

十二.SparkSQL中json資料檔案轉換parquet檔案

第一步      首先在本地建立一個json檔案,名字叫json_schema_infer.json,檔案中資料的格式如下: {"name":"liguohui","gender":"M","height":160} {"name":"zhangsan","ge

JSON資料格式轉換為Python的類物件

JOSN字串轉換為自定義類例項物件 有時候我們有這種需求就是把一個JSON字串轉換為一個具體的Python類的例項,比如你接收到這樣一個JSON字串如下: {"Name": "Tom", "Sex": "Male", "

優酷視訊kux格式轉換為MP4的技巧

  優酷作為老牌的視訊站點,每天都有很多人在上面看視訊。也有一些朋友會將視訊從優酷上下載下來,放到手機上進行觀看。可是,如果下載的視訊跟手機尺寸不匹配怎麼辦呢?而且優酷視訊只能在優酷上才能夠播放,對於那些手機沒有安裝優酷視訊的朋友來說又該怎麼辦呢?別急,今天就教給大家兩種將kux轉換為MP4的方法。一種是

騰訊視訊qlv格式轉換mp4的具體操作方法

  關於騰訊視訊qlv格式轉換成mp4的具體操作方法,今天來詳細的給你們介紹一下,你們要知道視訊轉換器是不可缺少的,所以是用之前要找到一款心儀的軟體是多麼重要哦!不多說了一起往下看吧。   視訊轉化器http://www.skycn.net/soft/appid/89820.html   音訊格式

Spark中RDD轉換DataFrame的方式(分別用Java和scala實現)

 一:準備資料來源       在專案下新建一個student.txt檔案,裡面的內容為: print? <code class="language-java">1,zhangsan,20   2,lisi,21   3,wanger,1

js 字串轉換數字的三方法, 取float型小數點後位數的方法

在js讀取文字框或者其它表單資料的時候獲得的值是字串型別的,例如兩個文字框a和b,如果獲得a的value值為11,b的value值為9 ,那麼a.value要小於b.value,因為他們都是字串形式的.在網上找了一下js字串轉數字的文章,這個比較全 方法主要有三種 轉換函式

spark-shell 資料檔案 讀 表 的方式!!! 相對路徑!!hdfs dfs -ls

park SQL應用 Spark Shell啟動後,就可以用Spark SQL API執行資料分析查詢。 在第一個示例中,我們將從文字檔案中載入使用者資料並從資料集中建立一個DataFrame物件。然後執行DataFrame函式,執行特定的資料選擇查詢。 文字檔案cu

分針網——每日分享:JavaScript進階(四)js字符串轉換數字的三方法

加入職業技能圈 q群:272292492 更多文章:www.f-z.cn 在js讀取文本框或者其它表單數據的時候獲得的值是字符串類型的,例如兩個文本框a和b,如果獲得a的value值為11,b的value值為9 ,那麽a.valu

python將字符串轉換字典的幾方法

AS ast clas 行處理 模塊 IT python color AR 當我們遇到類似於{‘a’:1, ‘b‘:2, ‘c‘:3}這種字符串時,想要把它轉換成字典進行處理,可以使用以下幾種方法: 1. Python自帶的eval函數(不安全) dictstr = ‘{

[Java類型轉換] Object 轉換 String 的三方法

new ron pointer point cep object color 是否 java類型轉換 方法一:Object.toString() obj.toString() 註意:必須保證Object不是null值,否則將拋出NullPointerException異

java程式將漢字轉拼音的方法-----------------第二方式

同樣需要下載pom檔案,匯入相應的jar包!!!!!! import net.sourceforge.pinyin4j.PinyinHelper;   import net.sourceforge.pinyin4j.format.HanyuPi

【C++】int轉換為string的方法(to_string、字串流)轉載

int轉換成string的兩種方法 第一種是to_string函式,這是C++11新增的,使用非常方便,簡單查了下:C++11標準增加了全域性函式std::to_string,以及std::stoi/stol/stoll等等函式(這幾個就是string轉int,long,以及long lo

acm資料預處理 —— 離散化的方法

部落格目錄 引言 如果我們要處理一些資料,如果: 我們只關心資料之間相對大小,而不關心每個資料到底有多大 離散化的大體意思就是:給資料重新編號,使新號碼依然具有跟之前相同的大小關係,來使資料更加緊湊。 比如說:給一個無向圖,每個節點都以一個字元表示,那麼我們就可以將

C#_將時間轉換字串的幾方法

//獲取當前系統時間 DateTime dt = System.DateTime.Now; //將系統時間轉換成字串 string strTime

java程式將漢字轉拼音的方法

1.使用pinyin4j將漢字轉成拼音,附件為pinyin4j的jar包  Java程式碼   import net.sourceforge.pinyin4j.PinyinHelper;   import net.sourceforge.piny

JavaScript字串轉換數字的三方法

parseFloat("1234blue"); //returns 1234.0parseFloat("0xA"); //returns NaNparseFloat("22.5"); //returns 22.5parseFloat("22.34.5"); //returns 22.34parseFloat(