飞权 阅读(30) 评论(0)

由于每次在查找数组的时候都是用的for循环遍历查找,很烦 , 要是能像C#那样用一个表达式查询就好了, 就在这个特别纠结的时候,

头脑中突然灵光一闪,是不是该去上个WC了,果然回来之后我想到的eval这个函数,对,一定行的,思路很特别,

这样的话就可以跳过那复杂的语法解析了,哈哈,太简单了,每个变量在作用域内使用eval这个函数是能够访问到这个变量的,

下面是几行简单的代码 

 

 1     <script type="text/javascript">
 2         var list = [
 3             { name: "张三", age: 18, isOut: false },
 4             { name: "李四", age: 20, isOut: true },
 5             { name: "老五", age: 20, isOut: false },
 6             { name: "老六", age: 21, isOut: false }
 7         ];
 8 
 9         function where(array, express) {
10             if (arguments.length > 2) {
11                 //合成express
12                 var c = 0;
13                 for (var i = 2; i < arguments.length; i++) {
14                     express = express.replace("{" + c + "}", arguments[i].toString());
15                     c++;
16                 }
17             }
18             var result = new Array();
19             //解析表达式
20             for (var i = 0; i < array.length; i++) {
21                 var p = array[i];
22                 var resu = eval(express);
23                 if (resu) {
24                     result.push(p);
25                 }
26             }
27             return result;
28         }
29         var list1 = where(list, "p.name=='张三' && p.age > 10 ");
30         var list2 = where(list, "p.name.indexOf('老') > -1 && p.age>=20 ");
31         var list3 = where(list, "p.name == '{0}' && p.age == {1}", "张三", 18);
32         console.log(list1);
33         console.log(list2);
34     </script>