find () не возвращает данные, только неопределенные - PullRequest
0 голосов
/ 16 октября 2018

Я хочу найти () s_id из этого JSON:

 {
        "StatusCode": 0,
        "StatusMessage": "OK",
        "StatusDescription": [
             {
                "s_id": "11E8C70C8A5D78888E6EFA163EBBBC1D",
                "s_serial": "PkMGo",
                "active": 0,
              },
             {
                "s_id": "11E8C70FB9D10DB38E6EFA163EBBBC1D",
                "s_serial": "UgooX",
                "active": 0,
                },
              {
                "s_id": "11E8C7179F85836D8E6EFA163EBBBC1D",
                "s_serial": "IiLnM",
                "active": 0,
                }, .....
            {
                "s_id": "11E8C71905123F1A8E6EFA163EBBBC1D",
                "s_serial": "LVpcP",
                "active": 0,
             }
              }]}

Я пытаюсь найти в этом, но возвращаю неопределенное.

 sensors: Sensors[]=[];
 hbp: HBP;
 sensor: Sensors;

     this.ss.getAllS().subscribe(
          sensors => {
            this.sensors = sensors 
            let ss = this.sensors.find(x => x.s_id ===  this.hbp.s_id);
            console.log(ss)
            if (ss) {
              this.selectedSensor = ss.s_id
            }
          }
        );

и

 selectedSensor : string = this.sensors.filter(
    x => x.s_id === this.sensor.s_id[0])
    .map(y => y.s_serial).join('');

Я думаю, что у меня есть проблема в этой строке:

        let ss = this.sensors.find(x => x.s_id ===  this.hbp.s_id);

, потому что, hbp возвращает этот json:

active: 0
homebox_id: "11E8C71154CC8C188E6EFA163EBBBC1D"
sensors: Array(2)
0: {s_serial: "s_id", s_id: "11E8C70C8A5D78888E6EFA163EBBBC1D"}
1: {s_serial: "UgooX", s_id: "11E8C70FB9D10DB38E6EFA163EBBBC1D"}

и в этой строке, возможно, найдет внутри этих датчиков

Это selectedSensor Я использовал в html-код

<input formControlName="s_id" type="text" placeholder="Select " [(ngModel)]="selectedSensor" aria-label="Number" matInput
            [matAutocomplete]="auto">

Как вернуть данные?

Можете ли вы спросить меня, пожалуйста, какая идея?

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Ваш код мне подходит, вы уверены, что метод this.ss.getAllS() возвращает массив типов StatusDescription?Я бы порекомендовал отлаживать то, что на самом деле находится в переменной sensors во время выполнения.

0 голосов
/ 16 октября 2018

Наблюдаемые: сенсоры изначально будут нулевыми, и вы не сможете получить доступ к свойствам нуля, чтобы что-либо сравнивать.

Вместо этого выполните быструю нулевую проверку значения сенсоров, затем выполните операцию поиска.:

this.ss.getAllS().subscribe(sensors => {
  if (sensors) {
    this.selectedSensor = this.sensors.find(x => x.s_id === this.hbp.s_id)
  }
});

Вот пример StackBlitz: https://stackblitz.com/edit/select-id-from-observable

0 голосов
/ 16 октября 2018

Использование может использовать find функцию, как показано ниже

  let ss =   this.sensors.find((item) => {
      return item.s_id === this.hbp.s_idl
    })


if (ss) {
    this.selectedSensor = ss.s_id         
      }

Если вы ищете фильтр, карту и объединение комбинаций, пожалуйста, убедитесь, что вы возвращаете item.property внутри map

.filter((item) => {
  return item.s_id ===  ss.s_id
}).map(
  (item) => {
    return item.s_serial
  }
).join( )

Проверьте этот пример кода

https://stackblitz.com/edit/arrayfind?file=index.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...