2016-04-10 12 views
-2

正しいコード。それがコンソールに印刷:
https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSCFJNHQ2k1hvNCD3F9zKp9WiPooSBkjUy-ymynu1T0kmiaW-7r
かなり正確である、唯一search_objects項目であるbacaouse。
ループ内のjavascriptの非常に奇妙な動作

  var j; 
     for (j=0;j< search_objects.length; j++){ 
      console.log(j) 
      website = search_objects[j].website; 
      var rand = Math.floor(Math.random()*3) 
      var img_src; 
      switch (rand){ 
       case 0: img_src = "res1.png"; break; 
       case 1: img_src = "res2.png"; break; 
       case 2: img_src = "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSCFJNHQ2k1hvNCD3F9zKp9WiPooSBkjUy-ymynu1T0kmiaW-7r"; break; 
      } 
      console.log(img_src); 
      var template_result = '<div class="owl-item " ..........div>' 

      console.log(search_objects[j].ID_subr) 
      add_carousel_item(template_result) 


     } 

ただし、forループに変更するともう一度実行されます。

 var j; //same thing if i declare like this: for(var j in search_objects) 
     for (j in search_objects){ 
      console.log(j) 
      website = search_objects[j].website; 
      var rand = Math.floor(Math.random()*3) 
      var img_src; 
      switch (rand){ 
       case 0: img_src = "res1.png"; break; 
       case 1: img_src = "res2.png"; break; 
       case 2: img_src = "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSCFJNHQ2k1hvNCD3F9zKp9WiPooSBkjUy-ymynu1T0kmiaW-7r"; break; 
      } 
      console.log(img_src); 
      var template_result = '<div class="owl-item " ..........div>' 

      console.log(search_objects[j].ID_subr) 
      add_carousel_item(template_result) 


     } 

そしてこの第二の場合には、このループはsearch_objectsのみつの項目を有する2回実行され、これはコンソールにオブジェクト自体及びそれの長さを印刷することによって証明されます。
これはコンソールに表示されます。
1 //長さ
0 // J
res1.png // math.randomからIMG
66 // Jの最初の項目
ユニーク//値のプロパティ??????! !!!!!!!!!!!!これは時代のほとんどを起こる:math.random
未定義//から
res2.png // IMGは

お知らせ[ユニーク] search_objectsの性質を示しているようです。時代の100%ではありません。それは、ページがリフレッシュされた後に最初に実行したときに実行されたときに発生しないとしましょう。 誰もこのようなことを以前に見たことがありますか?

+0

[JavaScriptで配列をループ]の可能な重複(http://stackoverflow.com/questions/3010840/loop-through-array-in-javascript) –

+0

はまあ '用を使用する理由はありません。..とにかく配列のinループです。 – Pointy

答えて

0

for...inは、配列要素のインデックスだけでなく、反復処理されるオブジェクトのすべての列挙可能なプロパティの名前を返します。だから、あなたのsearch_objectsオブジェクトのコードのどこかに、uniqueという名前のプロパティが追加されているようです。

この documentation pageから配列インデックスは、整数名前を持つだけ列挙特性であり、一般的なオブジェクトのプロパティに他の点では同一です。 ... forが特定の順序でインデックスを返すという保証はありません。 for ... inループステートメントは、非整数の名前と継承された名前を含むすべての列挙可能なプロパティを返します。

関連する問題