做爲一名前端程序猿,相對於後端操做數據的機會較少。然而,有些時候由於一些特殊的緣由(如:須要構形成對應插件須要的數據格式,須要返回特定的數據格式等)而不得不對數據進行篩選、重構。相對於後端語言,咱們沒有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;
}
};