2013-10-16 73 views
2

我从数据库中得到具有部分匹配结果的对象。变量的javascript增量名称

[Object { home1=4, away1=3, home2=4, away2=5, home3=6, away3=7, home4=6, away4=5, home5=3, away5=6}] 

和home1这是主队, away1的第一部分的结果 - >客队,HOME2这是主队的第二部分......等等等等,在我的情况

数据是每一个结果行,我从数据库中获得。 在行中,我有td与类:home1,home2,home3,away1,away2,并有匹配的相应部分的值。 我想检查值是否等于我从数据库中得到的值。 类似这样的

if ($('.home1') === data[index].home1; 
if($('.away2') === data[index].away2; 

应该有一些循环。我不知道如何做到这一点,我想到了一个数组

var array = [ 

         { 
          home1: data[index].home1, 
          away1: data[index].away1 
         }, 
          { 
          home2: data[index].home2, 
          away2: data[index].away2 
         }, 
          { 
          home3: data[index].home3, 
          away3: data[index].away3 
         }, 
         { 
          home4: data[index].home4, 
          away4: data[index].away4 
         }, 
         { 
          home5: data[index].home5, 
          away5: data[index].away5 
         } 


        ] 

,然后循环:

for(var X=0; X<5;X++){ 
homeX == data[index].homeX 
} 

我如何通过eval函数递增变量的名字吗?还是有其他解决方案吗?我很困惑。

+0

$(。home1)是无效的选择器 – webduvet

+1

您应该从数据库中正确格式化JSON。 +你应该发布你的代码来获得一些帮助。 – webduvet

回答

0

也许你应该用一点点不同的结构可能适合您的需求更好,就像这样:

array = [ 
    0: array [ 
     "home": "Text for home", 
     "away": "Text for away" 
    ], 

    1: array [ 
     "home": "", 
     "away": "" 
    ] 
    // More sub-arrays here 
]; 

您还可以用它初始化for循环:

var array = new Array(); 
var i; 
for (i = 0; i < 4; i++) { 
    array[i] = [ 
     "home": "", 
     "away": "" 
    ]; 
} 

或者是这样的:

array[0]["home"] = "Text for home"; 
array[0]["away"] = "Text for away"; 

您也可以将此结构用于数据数组,然后使用for-loop去通过他们两个(如果你想找到一个元素):

var result = NULL; 
for (i = 0; i < array.length; i++) { 
    if ( (array[i]["home"] == data[index]["home"]) && 
      (array[i]["away"] == data[index]["away"]) 
    ) { 
     // Found matching home and away 
     result = array[i]; 
     break; 
    } 
} 
if (result != NULL) { 
    alert("Found match: " + result["home"] + " - " + result["away"]); 
} 
else { 
    alert("No match"); 
} 

PS:代码没有测试,让我知道是否有问题。

1

您可以通过访问对象属性运算符[]:

for(var i=0; i<array.length; i++) 
{ 
    var item = array[i]; 
    var homePropertyName = 'home' + (i+1); 
    //now you can access homeX property of item using item[homePropertyName] 
    //e.g. item[homePropertyName] = data[index][homePropertyName] 
} 
0

你可以在浏览器中通过这样的窗口对象(fiddle)访问全局属性:

value1 = "ONE"; 

alert(window['value'+1]); 

但它不是好的设计。您应该研究如何正确格式化JSON对象。

0

我有这样的事情:

for(var i=0; i<2; i++) 

{ 

    var item = ARR[i]; 

    for(var x=0;x<5;x++){ 

    var hPropertyName = 'home_p' + (x+1); 

    var aPropertyName = 'away_p' + (x+1); 

    item[hPropertyName] = ARR[i][hPropertyName];  

     item[aPropertyName] = ARR[i][aPropertyName]; 

} 

,当我创建一个数组它的工作原理:

var ARR = [ 

     { 

      home_p1: 4, 

      away_p1: 5, 

      home_p2: 8, 

      away_p2: 9, 

      home_p3: 2, 

      away_p3: 1, 

      home_p4: 5, 

      away_p4: 3, 

      home_p5: 3, 

      away_p5: 2 

     }, 

     { 

      home_p1: 6, 

      away_p1: 1, 

      home_p2: 1, 

      away_p2: 2, 

      home_p3: 3, 

      away_p3: 4, 

      home_p4: 5, 

      away_p4: 6, 

      home_p5: 3, 

      away_p5: 2 

     } 

    ]; 

,但我没有创建一个数组,因为我有工作在我从数据库中获得的对象:

[Object { event_id=19328, home_result=3, away_result=2, home_p1=4, away_p1=3, home_p2=1, away_p2=2 ...... }] 

我只对这些参数感兴趣 - > home_p,away_p 我想把它推到我的数组看起来像ARR。我想我应该把我得到的一个对象数组转换为