过滤数据时错误无法读取未定义的属性名称字段名过滤器?

Posted

技术标签:

【中文标题】过滤数据时错误无法读取未定义的属性名称字段名过滤器?【英文标题】:error cannot read property name fieldnamefilter of undefined when filter data? 【发布时间】:2020-09-21 22:12:34 【问题描述】:

我在使用 Angular 7 应用程序时遇到错误无法读取未定义的属性名称“fieldnamefilter”过滤数据?

过滤器名称我根据变量fieldnamefilter动态获取

下面的代码在 this.fieldnamefilter 上给出错误:

  contentBody:any[];
 fieldnamefilter:any;

console.log("data values : " + this.fieldnamefilter ) 
//result is data values : onlineURL on console log

// error display on line below filter data[0].this.fieldnamefilter
this.contentBody = data.filter(item =>item != data[0].this.fieldnamefilter);

但如果我将它用作 data[0].onlineURL 如下所示;

 //working when use field name direct data[0].onlineURL

this.contentBody = data.filter(item =>item != data[0].onlineURL);

数据的数据类型为 any[]; 那么如何解决这个问题;

我尝试更新帖子:

console.log(this.fieldnamefilter it give me onlineURL
console.log(data[0][this.fieldnamefilter] it give me N/A

【问题讨论】:

this 关键字保留在类变量/方法中,如果您的数据数组对象中有一个名为 fieldnamefilter 的字段,您可以像 data[0].fieldnamefilter 一样使用它,方法是在中间删除它。 当使用字段名直接它工作但在我的情况下,我将过滤器名称存储在变量上,因为它不固定并且依赖于数据库中存在的数据 那么如何在数据[0]上使用变量名。变量有过滤器 好的,问题中并不清楚,如果您在该变量中存储一个字段,您可以像这样使用它:data[0][this.fieldnamefilter] 另外,使用 any for 类型也不是一个好习惯,你应该为每种类型都有模型,它使调试变得容易得多。 【参考方案1】:
const data = [onlineurl: 'asdasd', onlineurl: 'xxxx'];
const fieldnamefilter = 'onlineurl';
const filteredData = data.filter(entry => entry[fieldnamefilter] === data[0][fieldnamefilter]);

这个 sn-p 按预期工作,因此如果没有 MRE,我们无法调试代码,我无法进一步说明。如果您在 Stackblitz 或其他地方提供MRE,我们可以提供进一步帮助。此外,如果您的数据看起来与此不同,请提供样本。

【讨论】:

以上是关于过滤数据时错误无法读取未定义的属性名称字段名过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 TypeError:无法读取未定义的属性“过滤器”

尝试处理 /view/ajax 时出错:无法读取未定义的属性“长度”

反应 - 未捕获的类型错误:无法读取未定义的属性“toLowerCase”

带有可选路径参数的简单 React 路由器给出“TypeError:无法读取未定义的属性“过滤器”

未捕获的类型错误:无法读取未定义的属性“名称”

如何修复 React 中的“类型错误:尝试访问对象的属性时无法读取未定义的属性名称”