JavaScript简单实现表达式查询数组

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);

猜你喜欢

转载自blog.csdn.net/qq870841070/article/details/81100200