2014-09-05 67 views
0

我有一個奇怪的問題嵌套for循環在Javascript中。我想用一種語言填充一組答案,然後將這些答案包含在另一個數組中。問題是,當我看到輸出時,只使用來自inner for循環的數組的最後一次迭代。我相信這與基於其他答案的關閉有關,但由於我在這裏沒有多個功能,所以我不確定這將如何。這是一個JS Fiddle問題與簡單的嵌套for循環在Javascript中

下面是代碼:

var answer_array = []; 
var content_array = []; 
var i18n_array = ['en', 'fr', 'es']; 

for (var i18nCount = 0; i18nCount < 3; i18nCount++) { 

    var i18nLang = i18n_array[i18nCount]; 

     for (var ansIndex = 0; ansIndex < 3; ansIndex++) { 
      answer_array[ansIndex] = { 
       value: 'This is answer # ' + ansIndex + ' in this language ' + i18nLang 
      }; 
     } 

     console.log(i18nCount); 
     console.log(i18nLang); 
     console.log(JSON.stringify(answer_array,null,4)); 

    content_array[i18nCount] = { 
     i18n: i18nLang, 
     text: 'This question is in ' + i18nLang + ' language?', 
     answers: answer_array, 
    }; 
} 

console.log(JSON.stringify(content_array,null,4)); 

它產生這樣的:

0 
en 
[ 
    { 
     "value": "This is answer # 0 in this language en" 
    }, 
    { 
     "value": "This is answer # 1 in this language en" 
    }, 
    { 
     "value": "This is answer # 2 in this language en" 
    } 
] 
1 
fr 
[ 
    { 
     "value": "This is answer # 0 in this language fr" 
    }, 
    { 
     "value": "This is answer # 1 in this language fr" 
    }, 
    { 
     "value": "This is answer # 2 in this language fr" 
    } 
] 
2 
es 
[ 
    { 
     "value": "This is answer # 0 in this language es" 
    }, 
    { 
     "value": "This is answer # 1 in this language es" 
    }, 
    { 
     "value": "This is answer # 2 in this language es" 
    } 
] 
[ 
    { 
     "i18n": "en", 
     "text": "This question is in en language?", 
     "answers": [ 
      { 
       "value": "This is answer # 0 in this language es" 
      }, 
      { 
       "value": "This is answer # 1 in this language es" 
      }, 
      { 
       "value": "This is answer # 2 in this language es" 
      } 
     ] 
    }, 
    { 
     "i18n": "fr", 
     "text": "This question is in fr language?", 
     "answers": [ 
      { 
       "value": "This is answer # 0 in this language es" 
      }, 
      { 
       "value": "This is answer # 1 in this language es" 
      }, 
      { 
       "value": "This is answer # 2 in this language es" 
      } 
     ] 
    }, 
    { 
     "i18n": "es", 
     "text": "This question is in es language?", 
     "answers": [ 
      { 
       "value": "This is answer # 0 in this language es" 
      }, 
      { 
       "value": "This is answer # 1 in this language es" 
      }, 
      { 
       "value": "This is answer # 2 in this language es" 
      } 
     ] 
    } 
] 
+0

似乎西蒙娜詹尼正確回答了你的問題,請通過點擊對勾接受他的回答...謝謝 – CrandellWS 2014-09-05 23:20:35

回答

2

你一遍又一遍地重複使用相同answer_array再次,覆蓋它的3名成員。

在每個外部循環迭代中創建一個新數組,而不是在循環外部。

例如:

var content_array = []; 
var i18n_array = ['en', 'fr', 'es']; 

for (var i18nCount = 0; i18nCount < 3; i18nCount++) { 
    var answer_array = []; // Move this inside 
    var i18nLang = i18n_array[i18nCount]; 

+0

謝謝你這麼多,這是什麼問題是。 – navillus 2014-09-05 23:21:26

+0

你能接受我的回答嗎?不要貪婪,但:D – 2014-09-05 23:23:44

+0

是的,對不起,在接受按鈕上有5分鐘的延時。 – navillus 2014-09-05 23:24:10