我想通过此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">
如何返回数据?
你能问我任何想法吗?
答案 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( )
检查此示例代码
答案 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