如何获取javascript对象值?

时间:2019-05-10 16:55:18

标签: javascript object

我有这个静态过滤器:

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"

1 个答案:

答案 0 :(得分:0)

尝试使用样式指南,您的代码显示了一些问题,例如,使用eval被认为是不好的做法,因为它可能导致安全漏洞。 使用样式指南可能会非常有帮助:

AirBnb Styleguide guidelines

对于您的问题,不清楚要实现的目标,因为在第二个代码中,有一些属性(例如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());