Захват определенного свойства объекта вместо прямой ссылки

#javascript #angular #typescript

#javascript #угловой #typescript

Вопрос:

Я пытаюсь захватить конкретное свойство объекта в моем методе checkForUrgentEvents и вернуть его. Вместо того, чтобы ссылаться на него так, как я сейчас делаю, есть ли способ найти конкретное свойство? Я попробовал Object.hasownproperty, но поскольку он глубоко вложен, он не сработал.

   private checkForUrgentEvents(urgentEventsData: any, query:CurrentContentParams) {
  return urgentEventsData.data.Data[
      query.type   caasConfig.urgentContentIdSuffix
    ].content[query.id];

  }


// urgentEventsData:

{ status: 200,
  statusText: 'OK',
  headers:
   { connection: 'close',
     'transfer-encoding': 'chunked' },
  config:
   { adapter: [Function: httpAdapter],
     transformRequest: { '0': [Function: transformRequest] },
     transformResponse: { '0': [Function: transformResponse] },
     timeout: 0,
     xsrfCookieName: 'XSRF-TOKEN',
     method: 'get',
  data:
   { LatestModified: 1555080079154,
     Results: 1,
     Error: '',
     Data: { faqsurgentcontent: [Object] } } }

//query:
{ id: 'MAIN', type: 'faqs' }
  

Комментарии:

1. где находится MAIN и часто задаваемые вопросы в вашем объекте?

2. query.id является ОСНОВНЫМ и query.type является часто задаваемыми вопросами

Ответ №1:

У меня была похожая проблема, следуйте этому:

  parseContentResponse(response: any, scope: string, type: string) {
    if (response) {
      return (
        this.getContentObject(
          response,
          ['data', 'Data', `${scope}`, 'content', `${type}`]
        )
      );
    }
    return response;
  }

//then you could look for the key

 private getContentObject(response: any, contentPathArray: Array<string>) {
    return contentPathArray.reduce(
      (obj, key) => (obj amp;amp; obj[key] !== 'undefined' ? obj[key] : undefined),
      response
    );
  }
  

Ответ №2:

Вы можете попробовать это:

 function findById(o, id) {
    //Early return
    if( o.id === id ){
    return o;
    }
    var result, p; 
    for (p in o) {
        if( o.hasOwnProperty(p) amp;amp; typeof o[p] === 'object' ) {
            result = findById(o[p], id);
            if(result){
                return resu<
            }
        }
    }
    return resu<
}
  

Комментарии:

1. Но можем ли мы применить это в текущем контексте? поскольку запрос содержит идентификатор, а также тип