Javascript实现表达式查询数组
由于每次在查找数组的时候都是用的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>