我有这个静态过滤器:
let self = this;
return self.datagrid.filter(
function(data) {
return data.statut.toLowerCase().includes(self.search.toLowerCase())
||
data.etape.toLowerCase().includes(self.search.toLowerCase())
||
data.code.toLowerCase().includes(self.search.toLowerCase());
});
我想让它像这样动态:
let self = this;
return self.datagrid.filter(
function(data) {
let query = "";
for (let i = 1; i < self.colgrid.length; i++) {
if (i < self.colgrid.length - 1) {
query += "data." + self.colgrid[i].field + ".toLowerCase().includes(self.search.toLowerCase()) || ";
} else {
query += "data." + self.colgrid[i].field + ".toLowerCase().includes(self.search.toLowerCase())";
}
}
return eval(query);
});
但是它返回:
Cannot read property 'toLowerCase' of undefined"
答案 0 :(得分:0)
尝试使用样式指南,您的代码显示了一些问题,例如,使用eval被认为是不好的做法,因为它可能导致安全漏洞。 使用样式指南可能会非常有帮助:
对于您的问题,不清楚要实现的目标,因为在第二个代码中,有一些属性(例如field)在第一个代码中没有使用。
但是对于访问动态属性,Javascript通过使用方括号来为您提供这种可能性,因此,与其像在此处那样用点将字符串连接到查询中,还可以这样做:
query += "data." + self.colgrid[i].field + ".toLowerCase().includes(self.search.toLowerCase())";
您可以改为执行以下操作:
const query = [];
...
query.push(data[self.colgrid[i]].field.toLowerCase().includes(self.search.toLowerCase());