javascript經過字典思想操做數據

  做爲一名前端程序猿,相對於後端操做數據的機會較少。然而,有些時候由於一些特殊的緣由(如:須要構形成對應插件須要的數據格式,須要返回特定的數據格式等)而不得不對數據進行篩選、重構。相對於後端語言,咱們沒有Linq,Dictionary等利器。所以,特此介紹一種根據字典思想操做數據的方法。前端

1.從一個簡單的場景提及:咱們分別傳入0-6,頁面上打印出對應的星期一到星期七,像我這樣的菜鳥可能會這樣寫:  後端

var getWeekDay = function (dayNum) {
var strweekday = "";
switch (dayNum) {
case 0:
strweekday = "今天是星期一";
break;spa


......插件


case 6:
strweekday = "今天是星期天";
break;
}
return strweekday;
}code

 

看上去寫的有點累贅,而經過字典方式能夠這樣:ip

  var dayNum = 3,
    arrweekDic = ["一", "二", "三", "四", "五", "六", "天"],
    strweekday = "今天是星期" + arrweekDic[dayNum];get

  哈哈~是否是看上去要好一點了?it

2.前段時間碰到過這樣一個場景:io

  從頁面上很容易便能蒐集到這樣一個數據(模擬數據):function

  var list = [ { City: "北京", Province: "北京", KeyID: "1" },
         { City: "三亞", Province: "海南", KeyID: "2" },
         { City: "成都", Province: "四川", KeyID: "3" },
           { City: "綿陽", Province: "四川", KeyID: "4" },
           { City: "杭州", Province: "浙江", KeyID: "5" },
         { City: "紹興", Province: "浙江", KeyID: "6" } ];

  然而真正須要的確是這樣一個數據格式:

        {[{ City: "北京", Province: "北京", KeyID: "1" }],

          [{ City: "三亞", Province: "海南", KeyID: "2" }],

          [{ City: "成都", Province: "四川", KeyID: "3" },{ City: "綿陽", Province: "四川", KeyID: "4" },]

          [{ City: "杭州", Province: "浙江", KeyID: "5" },{ City: "紹興", Province: "浙江", KeyID: "6" } ]}

    所以必須得將數據的格式從新弄一弄。若是按照我這個菜鳥的方法,估計就直接:

  for(var i = 0,len = list.length;i < len;i++){

   for(...){

    //噼裏啪啦各類整的天昏地暗

    }

  }

 //然而經過字典方式卻能夠這樣:

   首先構造一個字典類型的數據:

  var keyArr = {
    "1": "1",
    "2": "2",
    "3": "3-4",
    "4": "3-4",
    "5": "5-6-7",
    "6": "5-6-7",
    "7": "5-6-7"
  }

  再根據keyArr 操做:

function getKeyIDGroups(list, keyArr) {

  var group = {};

  for (var index in list) {

    var per = list[index],

    key = keyArr[per.KeyID];

    if (typeof key === "undefined") { continue; };

    if (group[key] === undefined) {

    group[key] = [per];

        } else {

    group[key].push(per);

    }
  }
  return group;
 };

這樣看起來怎麼着也感受好一點吧,特別是之後有KeyID = 8, 9, 10再須要維護的時候,只須要改keyArr 的格式就行啦~

3.還有這麼一天,後端給了我這樣一個數據:

[{
 "puoductLineID": "0",
 "puoductLineName": "XXX",
   "productVoList": [
  {
   "productID": "00",
     "productName": "XXX",
     "productLineID": "0",
     "programList": [
    {
      "programID": "000",
      "productID": "00",
      "serviceSetList": [
        {
          "serviceSetID": "0000",
          "serviceSetName": "XXX",
          "programID": "000",
            "serviceList": [
              {
                "ServiceID": "00000",
                "ServiceName": "XXX",
                "ip": "127.0.0.1",
                "port": "8080",
                "serviceSetID": "0000"
              }...
            ]
          }...
        ]
      }...
    ]
  }
  ...
   ]
 }
 ...
]

天啦,一個嵌套了5層,每一層均可能有可能無,只第一層就有300多條數據啊~而我則須要拿出全部的ServiceSetID和ServiceName。因而我無奈地找到了後端同窗,告訴他應該他把數據構造好再給我。而他卻一臉不覺得然地說,這麼簡單,隨便寫兩個循環不就搞定了麼~我還忙得很,因而就這樣吃了閉門羹。算了,本身試着寫寫吧。因而用字典方式也算是較爲輕鬆地完成吧:

function filterData(data, pCode) {
  if (typeof data["serviceSetID"] !== "undefined") {
  return true;
 } else {
  var listColumnName = "",
  flag = false;
  for (var k = 0; k < listNames.length; k++) {
    if (typeof data[listNames[k]] !== "undefined") {
    listColumnName = listNames[k];
    break;
  }
 }
for (var i = 0; i < data[listColumnName].length; i++) {
  var per = data[listColumnName][i],
  code = "",
  name = "",
  nextPCode = "";
  for (var key in per) {
  if (per.hasOwnProperty(key)) {
    if (typeof filed[key] !== "undefined") {
    nextPCode = code = per[key];
    name = per[filed[key]];
    break;
  }
 }
}
if (filterData(per, nextPCode)) {
  result_jian.push({
  code: code,
  name: name,
  pCode: pCode
  });
    flag = true;
    }
   }
   return flag;
  }
};

相關文章
相關標籤/搜索