【问题标题】:javascript increment name of variablejavascript增加变量的名称
【发布时间】:2013-10-24 14:05:28
【问题描述】:

我从数据库中得到一个具有部分匹配结果的对象。

[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循环:

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

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

【问题讨论】:

  • $(.home1) 选择器无效
  • 您应该从数据库中获取格式正确的 JSON。 + 你应该发布你的代码以获得一些帮助。

标签: javascript loops for-loop increment


【解决方案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]
}

【讨论】:

    【解决方案2】:

    也许您应该使用一些不同的结构,以更好地满足您的需求,例如:

    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 循环来遍历它们(例如,如果您希望找到一个元素):

    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:代码未经测试,如果有问题请告诉我。

    【讨论】:

      【解决方案3】:

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

      value1 = "ONE";
      
      alert( window['value'+1] );
      

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

      【讨论】:

        【解决方案4】:

        我有这样的事情:

        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。我想我应该将我得到的对象转换为数组

        【讨论】:

          【解决方案5】:

          如果您对属性使用字符串名称,那么您可以尝试使用模板文字吗?

          var someObject = {}
          
          for(let i=0 ; i<values.length ; i++){
              someObject[`home${i+1}`] = values[i];
          } 
          

          如果你需要它是 ES5,你可以使用字符串连接。下面是一个工作示例:

          values = [1,2,3,4,5];
          
          let someObject = {};
          
          for(let i=0 ; i<values.length ; i++){
              someObject[`value${i+1}`]=values[i];
          }
          
          console.log(someObject.value1);
          console.log(someObject.value2);
          console.log(someObject.value3);
          console.log(someObject.value4);
          console.log(someObject.value5);

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-10-02
            • 2013-05-30
            • 1970-01-01
            • 2011-12-05
            • 2016-04-14
            • 2022-12-04
            • 2013-09-11
            相关资源
            最近更新 更多