JavaScript - 取得優先權最高的第一筆資料
這該說是實際工作中,遇到的一個問題
有一堆的語系與別名,還有預設值,
有這樣的一個設定後,從一堆的資料中,要找到符合條件最優先的資料
優先權如下
US , true
US, false
ALL, true
ALL, false
null, true
null, false
在 N 筆資料中,給我優先權最前面的別名資料
原本是 六個 for 迴圈,一個一個跑,
後來改成一個for 迴圈,然後用hashmap 處理,再跑六個條件,取得最先符合的條件,
後來我又想了一堆,後來又想出了一個新的最佳化演算法,
最差的狀況下,是執行N次,最好的狀況下是執行一次
於是我寫成下面的程式
<script>
var datas = [];
datas.push({"language":null,"isDefault":false,"alias":"test6"});
datas.push({"language":null,"isDefault":true,"alias":"test5"});
datas.push({"language":"ALL","isDefault":false,"alias":"test4"});
datas.push({"language":"ALL","isDefault":true,"alias":"test3"});
datas.push({"language":"US","isDefault":false,"alias":"test2"});
datas.push({"language":"US","isDefault":true,"alias":"test1"});
function getAliasPrority(language, isDefault) {
var prority = 0;
if(language=='US') prority+=1;
if(language=='ALL') prority+=3;
if(language==null) prority+=5;
if(isDefault==false) prority+=1;
return prority;
}
minPrority = 7;
primaryAlias = null;
for(i = 0 ; i < datas.length ; i++) {
prority = getAliasPrority(datas[i].language,datas[i].isDefault);
if(prority < minPrority) {
minPrority = prority;
primaryAlias = datas[i].alias;
}
if(prority==1) break;
}
console.log(minPrority);
console.log(primaryAlias);
</script>