我有一个数组,我想从字符串构建过滤谓词
var testArray=[{Id:1,IsChecked:true},{Id:2,IsChecked:false},{Id:3,IsChecked:false}];
var predicate='IsChecked==true && Id<3'
var filteredArray= testArray.filter(i=>i ????predicate) ????
我努力了
//this works
var predicate='IsChecked==true'
var filterFunction=new Function("i","return i." + predicate)
//this throw an error (Id is not defined)
var predicate='IsChecked==true && Id<3'
var filterFunction=new Function("i","return i." + predicate)
如何从字符串构造谓词?
欢迎使用其他javascript库(例如ramda和loadash)的任何想法。
最佳答案
要使用字符串进行制作,您需要使用eval
,这是一种不好的做法。
相反,predicte
可以是一个接受项目并对其进行条件处理的函数。您只需要将此函数传递到filter
中即可。
const testArray = [
{ Id:1, IsChecked: true},
{ Id:2, IsChecked: false}
];
const predicate = (item) => item.IsChecked == true;
const filteredArray = testArray.filter(predicate);
console.log(filteredArray);
关于javascript - 如何从字符串构建Array.filter的谓词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47546032/