这些javascript对象之间的区别是什么,以及如何循环

这些javascript对象之间的区别是什么,以及如何循环,javascript,jquery,Javascript,Jquery,我有一个有效的方法: cars={ ford:{ ford_car_one:'Ford Car One', ford_car_two:'Ford Car Two' }, toyota:{ toyota_car_one:'Toyota Car One', toyota_car_two:'Toyota Car Two' } };

我有一个有效的方法:

   cars={
        ford:{
            ford_car_one:'Ford Car One',
            ford_car_two:'Ford Car Two'
        },
        toyota:{
            toyota_car_one:'Toyota Car One',
            toyota_car_two:'Toyota Car Two'
        }
    };

    $('#cars_company').on('change', function(){
        $('#cars').html('');
        $.each(cars[$(this).val()], function(k, v){
            $('<option></option>').val(k).text(v)
            .appendTo($('#cars'));
        });
    });
这两个汽车对象之间有什么区别?

jQuery.each(cars,function(key,val){
        jQuery.each(val,function(ke2,va2)
           {console.log(va2);
        });
});
这就是如何循环通过它们的方法

你的物体形状不正确,应该是这样的

var cars = [
    {
        "name": "ford",
        "types": {
            "name": "fordcar2"
        }
    },
    {
        "name": "toyota",
        "types": {
            "name": "toyotacar2"
        }
    }
];

我会这样做,这个代码只是一个帮助你的示例,不是为你做的工作

这就是如何循环通过它们的方法

你的物体形状不正确,应该是这样的

var cars = [
    {
        "name": "ford",
        "types": {
            "name": "fordcar2"
        }
    },
    {
        "name": "toyota",
        "types": {
            "name": "toyotacar2"
        }
    }
];


我会这样做,这个代码只是一个帮助你的示例,不是为你做的工作

您定义的以下结构无效

汽车对象(来自您的代码):

cars={
    ford:{
        ford_car_one:'Ford Car One',
        ford_car_two:'Ford Car Two'
    },
    toyota:{
        toyota_car_one:'Toyota Car One',
        toyota_car_two:'Toyota Car Two'
    }
};
cars = {
  'ford': ['ford car one', 'ford car 2'],
  'toyota': ['toyota car one', 'toyota car 2'],
};
汽车对象:(无效语法)

两个汽车对象之间的差异

  • 第二个结构在语法上是错误的

    a。在
    类型中重复键
    。(键名在类型对象内重复)

    b。缺少
    }

  • 您在第二个结构(从第一个结构:
    ford\u car\u one:'ford car one'
    )中缺少信息
    ford\u car\u one
    ),此键用作脚本中set的值。(
    $('').val(k)

  • 如果您打算更改,请尝试下面建议的简单结构:

    cars={
        ford:{
            ford_car_one:'Ford Car One',
            ford_car_two:'Ford Car Two'
        },
        toyota:{
            toyota_car_one:'Toyota Car One',
            toyota_car_two:'Toyota Car Two'
        }
    };
    
    cars = {
      'ford': ['ford car one', 'ford car 2'],
      'toyota': ['toyota car one', 'toyota car 2'],
    };
    
    假设以上建议的结构,您需要按以下方式更改方法

    $('#cars_company').on('change', function(){
       $('#cars').html('');
       var selVal = $(this).val();
    
       $.each(cars[selVal ], function(idx, val){
          $('<option></option>')
            .val(idx) //Change val as you want ex: selVal + '_car_' + idx => ford_car_1
            .text(val)
            .appendTo($('#cars'));
       });
    });
    

    您定义的以下结构无效

    汽车对象(来自您的代码):

    cars={
        ford:{
            ford_car_one:'Ford Car One',
            ford_car_two:'Ford Car Two'
        },
        toyota:{
            toyota_car_one:'Toyota Car One',
            toyota_car_two:'Toyota Car Two'
        }
    };
    
    cars = {
      'ford': ['ford car one', 'ford car 2'],
      'toyota': ['toyota car one', 'toyota car 2'],
    };
    
    汽车对象:(无效语法)

    两个汽车对象之间的差异

  • 第二个结构在语法上是错误的

    a。在
    类型中重复键
    。(键名在类型对象内重复)

    b。缺少
    }

  • 您在第二个结构(从第一个结构:
    ford\u car\u one:'ford car one'
    )中缺少信息
    ford\u car\u one
    ),此键用作脚本中set的值。(
    $('').val(k)

  • 如果您打算更改,请尝试下面建议的简单结构:

    cars={
        ford:{
            ford_car_one:'Ford Car One',
            ford_car_two:'Ford Car Two'
        },
        toyota:{
            toyota_car_one:'Toyota Car One',
            toyota_car_two:'Toyota Car Two'
        }
    };
    
    cars = {
      'ford': ['ford car one', 'ford car 2'],
      'toyota': ['toyota car one', 'toyota car 2'],
    };
    
    假设以上建议的结构,您需要按以下方式更改方法

    $('#cars_company').on('change', function(){
       $('#cars').html('');
       var selVal = $(this).val();
    
       $.each(cars[selVal ], function(idx, val){
          $('<option></option>')
            .val(idx) //Change val as you want ex: selVal + '_car_' + idx => ford_car_1
            .text(val)
            .appendTo($('#cars'));
       });
    });
    

    好的,如果您想用普通的ole javascript方式来实现,应该是这样的:

    第一个,

    for(var i = 0; i < cars.length(); i++)  //loops through car companies
    {
        alert(cars[i] + ":");
        for(var j = 0; i < cars[i].length(); i++)  //loops through models
        {
            alert(cars[i][j]);  //alerts the each *property* of each model, which will be the name of each model
        }
    }
    
    for(var i=0;i
    第二,你应该这样做:

    for(var i = 0; i< cars.length(); i++)  //loops through car companies
    {
        alert(cars[i].name);
        for(var j = 0; j < cars[i].types.length(); j++)  //loops through car models, but has to use the correct property to do so
        {
            alert(cars[i].types[j]);
        }
    }
    
    for(var i=0;i

    但是请注意,这将是一个非常恼人的警报量。

    如果您想用普通的ole javascript方式来实现,那么应该是:

    第一个,

    for(var i = 0; i < cars.length(); i++)  //loops through car companies
    {
        alert(cars[i] + ":");
        for(var j = 0; i < cars[i].length(); i++)  //loops through models
        {
            alert(cars[i][j]);  //alerts the each *property* of each model, which will be the name of each model
        }
    }
    
    for(var i=0;i
    第二,你应该这样做:

    for(var i = 0; i< cars.length(); i++)  //loops through car companies
    {
        alert(cars[i].name);
        for(var j = 0; j < cars[i].types.length(); j++)  //loops through car models, but has to use the correct property to do so
        {
            alert(cars[i].types[j]);
        }
    }
    
    for(var i=0;i
    但请注意,这将是一个可笑的恼人的警报量。

    问题1 两个汽车物体之间的区别是什么

    如果我没有弄错的话,2对象之间的区别在于第一个对象是一个包含其他对象作为属性的对象,而第二个(暂时忽略无效语法)是一个包含2个元素的数组,每个元素包含2个属性

    对象1

    cars={
        ford:{
            ford_car_one:'Ford Car One',
            ford_car_two:'Ford Car Two'
        },
        toyota:{
            toyota_car_one:'Toyota Car One',
            toyota_car_two:'Toyota Car Two'
        }
    };
    
    这是一个名为cars的对象,它有两个属性,
    ford
    toyota
    。每个属性是另一个对象,每个对象有两个属性。在chrome中的控制台输出中,此对象如下所示:

    对象2

    cars = [
      { name : 'ford', types: { name : 'ford car one', name : 'ford car 2'},
      { name : 'toyota', types: { name : 'toyota car one', name : 'toyota car 2'},
    ];
    
    这个实例已经弄乱了语法,应该是(假设它的当前形式是预期的,但我不推荐!)

    在本例中,
    cars
    是一个包含2个元素的数组。每个元素都是一个匿名对象,其属性为
    名称
    类型
    <代码>类型
    有两个同名属性,即
    名称
    ,这意味着最后指定的
    名称
    将覆盖第一个
    名称
    。导致:

    正如您在上面的结果中所看到的,只有
    ford car 2
    toyota car 2
    保留在内部
    name
    属性中

    -显示两个
    当前对象的输出。
    问题2
    现在,如果我的
    javascript对象看起来像上面的..对象2

    首先,您必须修复语法错误,然后很可能重新考虑如何填充对象,看到name属性会被下一个属性覆盖

    假设您的对象现在有效:

    var cars = [
        {
        name: 'ford',
        types: [
            'ford car one',
            'ford car 2'
            ]},
        {
        name: 'toyota',
        types: [
            'toyota car one',
            'toyota car 2'
        ]}];
    
    导致:

    您现在可以执行以下操作:

    $(cars).each(function(){
        // only declared for clarity, not needed, using this is fine.
        var car = this;
    
        $result.append("- " + car.name + "<br />");
    
        $(this.types).each(function(){
            // only declared for clarity, not needed, using this is fine.
            var type = this;
    
            $result.append("-- " + type + "<br />");
        });
    
        $result.append("<br />");
    });
    
    $(汽车)。每个(功能(){
    //仅为清晰起见声明,不需要,使用此选项即可。
    var car=这个;
    $result.append(“-”+car.name+”
    ); $(this.types).each(函数(){ //仅为清晰起见声明,不需要,使用此选项即可。 变量类型=此; $result.append(“-