如何在箭头函数中的 Angular 中使用输入发送的对象 属性 (比第一层更深)?

How to use in Angular inside an arrow function an object property (deeper than 1st level) sent by input?

我正在使用 angular 7 并尝试在子组件中做一些事情:使用输入 属性 可以在对象的第一层或更深的层次。

我的子组件有这段代码:

if (this.values.filter(obj => obj[this.matchPropertyName] === $event[i].id).length === 0) {
  ...
}

其中 this.matchPropertyName 是我的输入(可以是 'id'、'myProperty.id'、...)

对于单个级别 (obj.id),此代码有效。但是,有时我需要从更深层次(obj.myProperty.id)使用,但它不起作用。 我怎样才能做到这一点?

如果不够清楚,请告诉我。

我正在使用 angular 7 和打字稿 3.2.4

我认为没有内置解决方案,但您可以使用简单的 splitreduce。例如:

const value = this.matchPropertyName.split('.').reduce((pre, curr) => pre[curr], obj);
this.matchPropertyName="myProperty.id"

时,

会给出 obj.myProperty.id 的值

Stackblitz

所以在你的情况下,你可以像这样使用它:

const theValue = this.matchPropertyName.split('.').reduce((pre, curr) => pre[curr], obj);
if (this.values.filter(obj => theValue === $event[i].id).length === 0) {
  ...
}

OP 的最终结果:

myEventListener($event) {
   if (this.values.filter(obj => this.resolveProperty(obj) === $event[i].id).length === 0) { 
      ... 
   }
}  
  
resolveProperty(obj) {
   return this.matchPropertyName.split('.').reduce((pre, curr) => pre[curr], obj);   
}