问题 1
两个汽车对象有什么区别?
如果我没记错的话,这两个对象之间的区别在于,第一个对象是一个对象,其中包含其他对象作为属性,而第二个对象(暂时忽略无效语法)是一个包含 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 的对象,它有 2 个属性ford
和toyota
. 每个属性都是另一个对象,每个对象有 2 个属性。这个对象在 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'},
];
这个实例的语法搞砸了,应该是(假设它的当前形式是有意的,但我不推荐它!)
var 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 个元素的数组。每个元素都是具有 和 属性的匿名name
对象types
。types
有 2 个同名的属性,即name
,这意味着最后指定name
的将覆盖第一个name
。导致:
正如您仅在上面的结果中看到的那样ford car 2
,toyota car 2
它们保留在内部name
属性中。
演示- 显示两个current
对象的输出。
问题2
现在,如果我的 javascript 对象看起来像上面的对象 2,我将如何执行 $.each(cars[$..... 代码块。
首先,您必须修复语法错误,然后很可能重新考虑如何填充对象,看到 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 />");
});
演示.each()
-使用suggested
对象迭代汽车和类型
关于性能的旁注。虽然.each()
很好,但您会发现使用嵌套标准for(i=0; i < cars.length; i++)
等会执行得更快。但是.each()
非常好并且运行速度足够快,差异很小。