JavaScript - 取得優先權最高的第一筆資料

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>