版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq870841070/article/details/81100200
你还在用for循环吗?
由于每次在查找数组的时候都是用的for循环遍历查找,很烦 , 要是能像C#那样用一个表达式查询就好了, 就在这个特别纠结的时候,
头脑中突然灵光一闪,是不是该去上个WC了,果然回来之后我想到的eval这个函数,对,一定行的,思路很特别,
平时我们一般用eval仅仅是把解析JSON字符串而已,现在才知道真的是杀鸡用牛刀了
这样的话就可以跳过那复杂的语法解析了,哈哈,太简单了,每个变量在作用域内使用eval这个函数是能够访问到这个变量的,
下面是几行简单的代码
var list = [
{ name: "张三", age: 18, isOut: false },
{ name: "李四", age: 20, isOut: true },
{ name: "老五", age: 20, isOut: false },
{ name: "老六", age: 21, isOut: false }
];
function where(array, express) {
if (arguments.length > 2) {
//合成express
var c = 0;
for (var i = 2; i < arguments.length; i++) {
express = express.replace("{" + c + "}", arguments[i].toString());
c++;
}
}
var result = new Array();
//解析表达式
for (var i = 0; i < array.length; i++) {
var p = array[i];
var resu = eval(express);
if (resu) {
result.push(p);
}
}
return result;
}
var list1 = where(list, "p.name=='张三' && p.age > 10 ");
var list2 = where(list, "p.name.indexOf('老') > -1 && p.age>=20 ");
var list3 = where(list, "p.name == '{0}' && p.age == {1}", "张三", 18);
console.log(list1);
console.log(list2);