Javascript 如何使用rxjs从json对象筛选属性?
我有一个json对象:Javascript 如何使用rxjs从json对象筛选属性?,javascript,angular,typescript,rxjs,observable,Javascript,Angular,Typescript,Rxjs,Observable,我有一个json对象: data: (85) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {
data: (85) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
labelPositions: (85) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
nodes: Array(26)
0: {id: 0, name: "CS-A", latitude: 51.84201494369347, longitude: 4.46476401684265}
1: {id: 1, name: "ZUID-E", latitude: 51.85043431186642, longitude: 4.4731833850155995}
2: {id: 2, name: "UNDEFINED", latitude: 51.852192429885925, longitude: 4.474941503035103}
3: {id: 3, name: "CS-L", latitude: 51.84773604637089, longitude: 4.470485119520069}
4: {id: 4, name: "CS-B", latitude: 51.85116783184093, longitude: 4.47391690499011}
使用此功能:
showSensors() {
this.sensorNodeService.sensorMetadata().subscribe((data) => {
console.log('sensorMetadata', data.nodes);
});
}
但是现在我只想得到纬度和经度的值。因此,您将得到如下列表:
showSensors() {
this.sensorNodeService
.sensorMetadata()
.pipe(map((data) => data.nodes.map((node) => [node.gpsLat, node.gpsLng])))
.subscribe((data2) => {
console.log(data2);
});
}
this.sensorNodeService.sensorMetadata().subscribe(data => {
const latlong = data.nodes.map(node => ({latitude: node.gpsLat, longitude: node.gpsLng}));
console.log(latlong);
console.log(latlong[0].latitude);
});
[51.84201494369347,4.46476401684265],
[51.85043431186642,4.4731833850155995]
等等
但如何做到这一点呢
多谢各位
我现在是这样的:
showSensors() {
this.sensorNodeService
.sensorMetadata()
.pipe(map((data) => data.nodes.map((node) => [node.gpsLat, node.gpsLng])))
.subscribe((data2) => {
console.log(data2);
});
}
this.sensorNodeService.sensorMetadata().subscribe(data => {
const latlong = data.nodes.map(node => ({latitude: node.gpsLat, longitude: node.gpsLng}));
console.log(latlong);
console.log(latlong[0].latitude);
});
但我还是明白了
[undefined, undefined]
22: (2) [undefined, undefined]
23: (2) [undefined, undefined]
因为api调用是由swagger生成的
这就是模型:
export interface Node {
readonly id?: number;
readonly name?: string | null;
readonly gpsLat?: number;
readonly gpsLng?: number;
}
所以我试着这样做:
showSensors() {
this.sensorNodeService
.sensorMetadata()
.pipe(map((data) => data.nodes.map((node) => [node.gpsLat, node.gpsLng])))
.subscribe((data2) => {
console.log(data2);
});
}
this.sensorNodeService.sensorMetadata().subscribe(data => {
const latlong = data.nodes.map(node => ({latitude: node.gpsLat, longitude: node.gpsLng}));
console.log(latlong);
console.log(latlong[0].latitude);
});
但仍然没有馈入只需使用标准ES6功能,如: 或 可以使用函数根据另一个数组的属性创建一个数组。试试下面的方法
var data={节点:[
{id:0,名称:“CS-A”,纬度:51.84201494369347,经度:4.46476401684265},
{id:1,名称:“ZUID-E”,纬度:51.8504343186642,经度:4.473183850155995},
{id:2,名称:“未定义”,纬度:51.852192429885925,经度:4.474941503035103},
{id:3,名称:“CS-L”,纬度:51.84773604637089,经度:4.470485119520069},
{id:4,名称:“CS-B”,纬度:51.8511678384093,经度:4.47391690499011}
]};
const latlong=data.nodes.map(node=>[node.latitude,node.longitude]);
控制台日志(latlong)代码>请尝试以下操作:
var data={节点:[
{id:0,名称:“CS-A”,纬度:51.84201494369347,经度:4.46476401684265},
{id:1,名称:“ZUID-E”,纬度:51.8504343186642,经度:4.473183850155995},
{id:2,名称:“未定义”,纬度:51.852192429885925,经度:4.474941503035103},
{id:3,名称:“CS-L”,纬度:51.84773604637089,经度:4.470485119520069},
{id:4,名称:“CS-B”,纬度:51.8511678384093,经度:4.47391690499011}
]};
const latlong=data.nodes.map(node=>({gpsLat:node.latitude,gpsLng:node.longitude}));
控制台日志(latlong);
console.log(latlong[0].gpsLat)代码>谢谢。但是名称是:node.gpsLat,node.gpsLng。现在我得到这个[undefined,undefined]3:(2)[undefined,undefined]这就是对象:导出接口节点{readonly id?:number;readonly name?:string | null;readonly gpsLat?:number;readonly gpsLng?:number;}你可以用[Node.gpsLat,Node.gpsLng]替换[Node.latitude,Node.longitude]
。我已经更新了答案,在服务中也使用了RxJSmap
操作符。@mightycodeNewton:您现在正在创建一个对象数组。您甚至可以在控制台.log中看到它。尝试做到这一点:const latlong=data.nodes.map(node=>[node.gpslt,node.gpsLng])
。但是,在数据中,什么是解决方案?在数据中,它们被称为“经度”和“纬度”。在代码示例中,使用“node.gpsLat”和“node.gpsLng”。将它们更改为“node.latitude”和“node.longitude”,它应该可以工作。嗨,呃,我编辑了这篇文章,因为模型名称不同,那么数据库表中的数据库表就是名称:latitude和longitude