JavaScript簡單實現表示式查詢陣列
阿新 • • 發佈:2018-12-30
你還在用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);