2

How to parse this object data according to index name. I am sharing with you a data example. But in real project am getting huge amount of indexes and children json data too.
Below JSON data example :

var vehicles = {
        'cars':[
            {
                "name":"Car 1",
                "model":"Car 1 Model 1"
            },
            {
                "name":"Car 2",
                "model":"Car 2 Model 2"
            },
        ],
        'bikes':[
            {
                "name":"Bike 1",
                "model":"Bike Model 1",
            },
            {
                "name":"Bike 2",
                "model":"Bike Model 2",
            }
        ],
        'buses':[
            {
                "name":"Bus 1",
                "model":"Bus Model 1",
            },
            {
                "name":"Bus 2",
                "model":"Bus Model 2",
            }
        ],
    }

Am getting this dynamically from server. In this json packet data cars/bikes/buses. But Can be different names too.
Question is how to access Car 1 or Bike 1 according to cars / bikes without define like this below

console.log(vehicles.buses[0].name);
Output : Bus 1

If you see buses defined here. I want to do this dynamically. How to do?

Ripon Uddin
  • 709
  • 3
  • 14
  • 29

2 Answers2

1

If I've understood your question, you want to be able to access each array in the properties without knowing the name of the properties before runtime.

As such you can use the Object.keys() collection along with bracket notation to access the array, something like this:

Object.keys(vehicles).forEach((key) => {
  console.log(vehicles[key][0].name);
});

var vehicles = {
  'cars': [{
    "name": "Car 1",
    "model": "Car 1 Model 1"
  }, {
    "name": "Car 2",
    "model": "Car 2 Model 2"
  }],
  'bikes': [{
    "name": "Bike 1",
    "model": "Bike Model 1",
  }, {
    "name": "Bike 2",
    "model": "Bike Model 2"
  }],
  'buses': [{
    "name": "Bus 1",
    "model": "Bus Model 1"
  }, {
    "name": "Bus 2",
    "model": "Bus Model 2"
  }],
  'foo': [{
    "name": "Foo 1",
    "model": "Foo Model 1"
  }, {
    "name": "Foo 2",
    "model": "Foo Model 2"
  }]
}

Object.keys(vehicles).forEach((key) => {
  console.log(vehicles[key][0].name);
});
Rory McCrossan
  • 331,213
  • 40
  • 305
  • 339
1

Create a function where you map the vehicle type array and return the name:

var vehicles = {
  cars: [{
    name: "Car 1",
    model: "Car 1 Model 1"
  }, {
    name: "Car 2",
    model: "Car 2 Model 2"
  }],
  bikes: [{
    name: "Bike 1",
    model: "Bike Model 1"
  }, {
    name: "Bike 2",
    model: "Bike Model 2"
  }],
  buses: [{
    name: "Bus 1",
    model: "Bus Model 1"
  }, {
    name: "Bus 2",
    model: "Bus Model 2"
  }]
};

function getVehicleNames(type) {
  return Object.keys(vehicles[type]).map(key => vehicles[type][key].name)
}

function getAllVehicleNames() {
  return Object.keys(vehicles).map(type => {
      return {[type]: Object.keys(vehicles[type]).map(key => vehicles[type][key].name)}
  })
}

//console.log(getVehicleNames("buses"))
//console.log(getVehicleNames("cars"))
console.log(getAllVehicleNames())
symlink
  • 11,984
  • 7
  • 29
  • 50