JS數組內置了不少有用的方法,方便我們對數據的查詢和篩選。例如我們有一堆數據:
代碼如下:
var heros = [
// 名============攻=====防=======力量====敏捷=====智力====
{name:'冰室女巫', DP:38, AP:1.3, Str:16, Agi:16, Int:21},
{name:'沉默術士', DP:39, AP:1.1, Str:17, Agi:16, Int:21},
{name:'娜迦海妖', DP:51, AP:6.0, Str:21, Agi:21, Int:18},
{name:'賞金獵人', DP:39, AP:4.0, Str:17, Agi:21, Int:16},
{name:'劇毒術士', DP:45, AP:3.1, Str:18, Agi:22, Int:15},
{name:'光之守衛', DP:38, AP:1.1, Str:16, Agi:15, Int:22},
{name:'煉金術士', DP:49, AP:0.6, Str:25, Agi:11, Int:25}
//...
];
要查詢攻擊大于40并且防御小于4的英雄,我們可以用Array的filter方法:
代碼如下:
var match = heros.filter(function(e) {
return e.DP > 40 && e.AP < 4;
});
返回得到一個數組,包括符合條件的2個結果。
相比手工去寫循環判斷,filter方法為我們提供了很大的方便。但它是基于函數回調的,所以每次使用必須寫一個function,對于簡單的查詢很是累贅,而且使用回調效率也大大降低。但這是也沒有辦法的,想簡單必然要犧牲一定性能。 如果能使用比這更簡單的語句,并且完全擁有代碼展開時效率,該有是多么完美的事。
先來想象下,要是能將上面的代碼寫成這樣,并且查詢速度和手寫的遍歷判斷一樣:
代碼如下:
var match = heros.select('@DP>40 AND @AP<4');
看上去有點像SQL,連語法都換了?這樣豈不是要寫一個詞法分析,語義解釋等等等等一大堆的腳本引擎的功能了,沒個幾千上萬行代碼都搞不定,而且效率肯定更糟了。。如果想到那么復雜,那么你還沒深刻的理解腳本的精髓。但凡是腳本語言,都有運行時動態解釋代碼的接口,例如vbs的execute();js的eval(),new Function(),甚至創建一個
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com