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