我有一个数组,我想从字符串构建过滤谓词

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/

10-10 00:14