2014-09-05 253 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