【问题标题】:Dynamically JSON Data parse according to index name [duplicate]根据索引名称动态解析 JSON 数据 [重复]
【发布时间】:2020-03-30 18:24:27
【问题描述】:

如何根据索引名称解析这个对象数据。我与您分享一个数据示例。但在实际项目中,我也获得了大量的索引和子 json 数据。
下面是 JSON 数据示例:

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",
            }
        ],
    }

我正在从服务器动态获取此信息。在这个 json 数据包中,汽车/自行车/公共汽车。但也可以是不同的名称。
问题是如何根据汽车/自行车访问 Car 1 或 Bike 1 而没有像下面这样定义

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

如果您看到此处定义的总线。我想动态地做到这一点。 怎么办?

【问题讨论】:

    标签: javascript jquery arrays json


    【解决方案1】:

    如果我理解了您的问题,您希望能够在运行前不知道属性名称的情况下访问属性中的每个数组。

    因此,您可以使用 Object.keys() 集合和括号符号来访问数组,如下所示:

    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);
    });

    【讨论】:

    • 正是我想要的。 @罗里
    【解决方案2】:

    创建一个函数,在其中映射车辆类型数组并返回名称:

    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
    • @RiponUddin 然后你必须遍历整个车辆对象。
    • 我正在寻找这个@symlink 虽然第 1 个答案对我有用。
    • @RiponUddin 查看我的编辑
    • 我正在从服务器获取 72,572 行。在 DataTable 上显示需要 4-5 分钟。有什么办法让它快点?
    猜你喜欢
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 2020-01-15
    • 2020-08-12
    相关资源
    最近更新 更多