質問1
2つの車のオブジェクトの違いは何ですか?
2つのオブジェクトの違いは、私が誤解しない限り、最初のオブジェクトは他のオブジェクトをプロパティとして内部に持つオブジェクトであり、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'
}
};
これは、2つのプロパティを持つcarsという名前のオブジェクト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
DEMO-両方の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()
、完全に問題なく、十分に高速に実行されます。違いはわずかです。