Tengo un conjunto de datos

$scope.mydata = [{
    "Block_Devices": {
      "bdev0": {
        "Backend_Device_Path": "/dev/ram1",
        "Capacity": "16777216",
        "Bytes_Written": 1577,
        "timestamp": "4365093970",
        "IO_Operations": 17757,
        "Guest_Device_Name": "vdb",
        "Bytes_Read": 17793,
        "Guest_IP_Address": "192.168.26.88"
      },
      "bdev1": {
        "Backend_Device_Path": "/dev/ram2",
        "Capacity": "16777216",
        "Bytes_Written": 1975,
        "timestamp": "9365093970",
        "IO_Operations": 21380,
        "Guest_Device_Name": "vdb",
        "Bytes_Read": 20424,
        "Guest_IP_Address": "192.168.26.100"
      }
    },
    "Number of Devices": 2
  }]

Y me gustaría crear una matriz a partir de este json como

devices = ['bdev0', 'bdev1']

Cuando lo intento

$scope.mydata.Block_Devices me da todo el objeto json pero solo quiero los nombres de los objetos, es decir, bdev0 y bdev1, ¿cómo puedo obtener eso?

0
Imo 11 may. 2016 a las 13:37

3 respuestas

La mejor respuesta

Pruebe esto:

var devices = [];

for (var key in $scope.mydata[0].Block_Devices) {
    devices.push(key) 
}
1
Inanc Gumus 26 ago. 2017 a las 14:48

Tienes que recorrer las propiedades del objeto para archivar esto:

var devices = [];
var data = $scope.mydata[0].Block_Devices;

for (var name in data) {
  if (data.hasOwnProperty(name)) {
    devices.push(name);
  }
}

La llamada hasOwnProperty es importante para omitir las propiedades del prototipo, si está seguro de que no hay ninguna, puede omitir esto.

0
Linus 11 may. 2016 a las 11:15

Por si acaso la solución ES5

devices = Object.keys($scope.mydata[0].Block_Devices)
1
Yury Tarabanko 11 may. 2016 a las 11:15