2014-09-05 298 views
0

我想用數組中的值('contentStrings')填充一系列字符串(beijingString,belingString等);所以沒有必要這樣做:JavaScript:將數組中的值賦值給另一個變量

beijingString = 'five strings'; 
berlinString = 'similar but different five strings'; 
bronxString = 'also similar but different five strings'; 
buenosairesString = 'similar again but subtly different five strings'; 

最後我有40個這樣的字符串填充。

我試着把城市的字符串變量名放入第二個數組(城市),並循環遍歷,分配索引值。

但它不起作用。

我需要以某種方式將每個變量作爲「城市」數組的元素「引用」(?)嗎?

TIA!

完整的代碼片段:

<!DOCTYPE html> 
<html> 
<head> 
</head> 
<body> 
    <script> 
     var beijingContentString = ''; 
     var berlinContentString = ''; 
     var bronxContentString = ''; 
     var buenos_airesContentString = ''; 
     var contentStrings = [ 
      ['http://www.beijing.com', 
      'Beijing title', 
      '<img src="./images/beijing.jpg">', 
      'Beijing caption', 
      'Beijing description' 
      ], 
      ['http://www.berlin.com', 
      'Berlin title', 
      '<img src="./images/berlin.jpg">', 
      'Berlin caption', 
      'Berlin description' 
      ], 
      ['http://www.bronx.com', 
      'Bronx title', 
      '<img src="./images/Bronx.jpg">', 
      'Bronx caption', 
      'Bronx description' 
      ], 
      ['http://www.buenosaires.com', 
      'Buenos Aires title', 
      '<img src="./images/Buenos Aires.jpg">', 
      'Buenos Aires caption', 
      'Buenos Aires description' 
      ] 
     ]; 

var beijingString = ''; 
var berlinString = ''; 
var bronxString = ''; 
var bueonosairesString = ''; 

alert ('before: ' + beijingString); 
alert ('before: ' + berlinString); 
alert ('before: ' + bronxString); 
alert ('before: ' + bueonosairesString); 

var cities = [beijingString, berlinString, bronxString, bueonosairesString]; 
var contentArrayLoop = 0; 
for (contentArrayLoop = 0; contentArrayLoop < 4; contentArrayLoop++) { 
    cities[contentArrayLoop]= 
          contentStrings[contentArrayLoop][0] + 
          contentStrings[contentArrayLoop][1] + 
          contentStrings[contentArrayLoop][2] + 
          contentStrings[contentArrayLoop][3] + 
          contentStrings[contentArrayLoop][4] 
    ; 
alert(cities[contentArrayLoop]); 
}; 

alert ('after: ' + beijingString); 
alert ('after: ' + berlinString); 
alert ('after: ' + bronxString); 
alert ('after: ' + bueonosairesString); 

</script> 
</body> 
</html> 
+0

你可以把它變成一個對象嗎? – 2014-09-05 00:49:50

回答

1

一個更好的例子是在這裏: http://jsfiddle.net/L1dpt0bs/1/

你不需要使用任何靜態數組的城市。

var contentArrayLoop = 0; 

for (contentArrayLoop = 0; contentArrayLoop < 4; contentArrayLoop++) { 
    var city = contentStrings[contentArrayLoop][1] 
    city = city.substring(0, city.indexOf(' ')); 
    window[city + 'string'] = contentStrings[contentArrayLoop].join(''); 
}; 

alert ('after: ' + Beijingstring); 
alert ('after: ' + Berlinstring); 
alert ('after: ' + Bronxstring); 
alert ('after: ' + Bueonosairesstring); 
0

您可以使用動態變量的概念

var cities = ['beijing', 'berlin', 'bronx', 'bueonosaires']; 
var contentArrayLoop = 0; 
for (contentArrayLoop = 0; contentArrayLoop < 4; contentArrayLoop++) { 
    window[cities[contentArrayLoop] + 'string'] = 

         contentStrings[contentArrayLoop][0] + 
         contentStrings[contentArrayLoop][1] + 
         contentStrings[contentArrayLoop][2] + 
         contentStrings[contentArrayLoop][3] + 
         contentStrings[contentArrayLoop][4] 
; 

}; 

    alert ('after: ' + beijingstring); 
    alert ('after: ' + berlinstring); 
    alert ('after: ' + bronxstring); 
    alert ('after: ' + bueonosairesstring); 

全部代碼是在這裏:

http://jsfiddle.net/m745odgf/

+0

masum7,謝謝!在你給出的兩個例子的每一箇中,是否有可能避免_window [] _部分:我只想填充這些變量 - 而不是真正顯示它們...稍後在我的代碼中出現? – marksealey 2014-09-05 02:07:56

+0

對於作業你需要使用.. 但是,當你將使用它,你不需要使用窗口..這只是一次.. – masum7 2014-09-05 02:11:51

+0

另請檢查我給出的其他答案..總動態一。那一個更好 – masum7 2014-09-05 02:12:12

0

這不是你的所有數據,但是您可以使用這種格式輕鬆訪問信息:

var oContentObj = 
{ 
    buenos_airesContent : 
    { 
     url  : 'http://www.buenosaires.com', 
     title  : 'Buenos Aires title', 
     img  : '<img src="./images/Buenos Aires.jpg">', 
     caption : 'Buenos Aires caption', 
     dsc  : 'Buenos Aires description' 
    } 
} 

來遍歷對象的屬性,使用for ... in循環:

for (var oCity in oContentObj) 
    { 
     // now you have a loop of the cities.. do stuff 
     for (var oProp in oCity) 
     { 
     // Now you have the properties of the city.. do more stuff 
     } 
    } 

或者你可以調用的屬性直接

oContentObj["CityName"]["CityProp"]; 
// or 
oContentObj.CityName.CityProp; 

而對於更大處理客戶端數據的圖片,

that object can become much more than a container

它也可以控制處理數據。包含,顯示,修改和運輸,如果需要的話。 :d

+0

Brett,謝謝!我確實想過這樣的對象。我仍然可以循環訪問數據來填充連續的對象,而不需要單獨分配線條和線條嗎? – marksealey 2014-09-05 02:10:12

+0

是的,但是通過這個對象,您可以循環通過它中的項目,如果你需要做一個[for .. in](http://stackoverflow.com/questions/684672/loop-through-javascript-object)循環或者你可以通過nae調用屬性如果你需要這樣做。我喜歡它比任何一個陣列都好。此時,您甚至可以開始在對象上放置函數並使其自行控制,爲您提供所需的數據並修改或顯示它,甚至可以返回屬性或值的列表。 – 2014-09-05 03:18:40

+0

[這是我處理特定javascript模塊的模式。它還不完美,但該組織在幾乎任何形狀下都能很好地處理客戶端功能。](http://stackoverflow.com/questions/3750082/javascript-oop-best-practices/13074081#13074081) – 2014-09-05 03:21:54