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