按javascript中的值浏览json

时间:2018-06-19 16:06:15

标签: javascript json

{
    "brands": [
        {
            "name": "CarBrand1",
            "models": [
                {
                    "name": "CarModel1"
                },
                {
                    "name": "CarModel2"
                },
                {
                    "name": "CarModel3"
                }
            ]
        },
        {
            "name": "CarBrand2",
            "models": [
                {
                    "name": "CarModel1"
                },
                {
                    "name": "CarModel2"
                },
                {
                    "name": "CarModel3"
                }
            ]
        }
    ]
}

我有一个这样的JSON,我想进入CarBrand1来获取CarBrand1的所有汽车模型。我能做

json.brands[0]

获取CarBrand1汽车模型或

json.brands[1]

获取CarBrand2汽车模型。但是,如果我想通过品牌名称值(“名称”:“ CarBrand2”)获得CarBrand2汽车型号怎么办?

类似

json.brands['CarBrand1']

(当然,这不是正确的方法)

4 个答案:

答案 0 :(得分:2)

没有简单的方法可以通过属性名称访问对象,而无需进行迭代和比较。我猜最简单的方法是使用find函数:

json.brands.find((c) => c.name == "CarBrand1")

请注意,如果您经常需要按名称访问品牌,建议您创建某种查找字典。例如:

lookup = []; 
js.brands.forEach((c, i) => lookup[c.name] = c)

lookup["CarBrand1"] // --> {name: "CarBrand1", models: Array(4)}

答案 1 :(得分:0)

您可以创建一个以汽车名称为参数并返回汽车模型数组的可重用函数:

var car = {
    "brands": [
        {
            "name": "CarBrand1",
            "models": [
                {
                    "name": "CarModel1"
                },
                {
                    "name": "CarModel2"
                },
                {
                    "name": "CarModel3"
                }
            ]
        },
        {
            "name": "CarBrand2",
            "models": [
                {
                    "name": "CarModel1"
                },
                {
                    "name": "CarModel2"
                },
                {
                    "name": "CarModel3"
                }
            ]
        }
    ]
}
function getCarModel(name){
  for(var i=0; i<car.brands.length; i++){
    if(car.brands[i].name === name){
      return car.brands[i].models;
    }
  }
}

console.log(getCarModel("CarBrand2"));

答案 2 :(得分:0)

您也可以使用filter()来实现。

var json_data = {
  "brands": [{
      "name": "CarBrand1",
      "models": [{
          "name": "CarModel1"
        },
        {
          "name": "CarModel2"
        },
        {
          "name": "CarModel3"
        }
      ]
    },
    {
      "name": "CarBrand2",
      "models": [{
          "name": "CarModel1"
        },
        {
          "name": "CarModel2"
        },
        {
          "name": "CarModel3"
        }
      ]
    }
  ]
};

function getCarModelByName(name) {
  var json_array = json_data.brands;
  return json_array.filter(
    function(json_array) {
      if (json_array.name == name) {
        return json_array.models;
      }
    }
  );
}
var model = getCarModelByName('CarBrand2');
console.log(model[0].models)

答案 3 :(得分:0)

尝试一下:

var jsonObj = {
    "brands": [
        {
            "name": "CarBrand1",
            "models": [
                {
                    "name": "CarModel1"
                },
                {
                    "name": "CarModel2"
                },
                {
                    "name": "CarModel3"
                }
            ]
        },
        {
            "name": "CarBrand2",
            "models": [
                {
                    "name": "CarModel1"
                },
                {
                    "name": "CarModel2"
                },
                {
                    "name": "CarModel3"
                }
            ]
        }
    ]
};

var res = jsonObj.brands.filter(obj => obj.name == 'CarBrand2');

console.log(res[0].models);