Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用rxjs从json对象筛选属性?_Javascript_Angular_Typescript_Rxjs_Observable - Fatal编程技术网

Javascript 如何使用rxjs从json对象筛选属性?

Javascript 如何使用rxjs从json对象筛选属性?,javascript,angular,typescript,rxjs,observable,Javascript,Angular,Typescript,Rxjs,Observable,我有一个json对象: data: (85) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {

我有一个json对象:

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]
。我已经更新了答案,在服务中也使用了RxJS
map
操作符。@mightycodeNewton:您现在正在创建一个对象数组。您甚至可以在控制台.log中看到它。尝试做到这一点:
const latlong=data.nodes.map(node=>[node.gpslt,node.gpsLng])
。但是,在数据中,什么是解决方案?在数据中,它们被称为“经度”和“纬度”。在代码示例中,使用“node.gpsLat”和“node.gpsLng”。将它们更改为“node.latitude”和“node.longitude”,它应该可以工作。嗨,呃,我编辑了这篇文章,因为模型名称不同,那么数据库表中的数据库表就是名称:latitude和longitude