find()不返回数据,仅未定义

时间:2018-10-16 14:29:18

标签: angular typescript find

我想通过此JSON查找()s_id:

 {
        "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"}

在此行中可能会在此传感器内找到

我在html代码中使用的selectedSensor

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

如何返回数据?

你能问我任何想法吗?

3 个答案:

答案 0 :(得分:0)

使用可以使用如下的find函数

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


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

如果您要查找过滤器,地图和联接组合,请确保返回了地图

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

检查此示例代码

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

答案 1 :(得分:0)

您的代码对我来说似乎还不错,您确定this.ss.getAllS()方法返回一个StatusDescription类型的数组吗?我建议在运行时调试sensors变量中的实际内容。

答案 2 :(得分:0)

observable:传感器最初将为null,并且您无法访问null属性以将任何内容与之进行比较。

相反,对传感器值进行快速的空检查,然后执行查找操作:

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