连接Javascript函数的参数名称

时间:2018-03-02 04:08:33

标签: javascript concatenation

我有一些工作代码,我正在尝试使用循环进行优化但是在连接参数名称时遇到问题。

var objlocations = {};
$.get('https://example.com/something/ajax-state?somevar=' + somevar, function(data) {

  $.each(data, function(index,DBRow){
        
    objlocations['point1x'] = DBRow.Point01X;
    objlocations['point1y'] = DBRow.Point01Y;
    objlocations['point2x'] = DBRow.Point02X;
    objlocations['point2y'] = DBRow.Point02Y;
    objlocations['point3x'] = DBRow.Point03X;
    objlocations['point3y'] = DBRow.Point03Y;
    objlocations['point4x'] = DBRow.Point04X;
    objlocations['point4y'] = DBRow.Point04Y;
    // There are about 30 more of these needed

    var $grid = jQuery('#MyDiv');
    $grid.empty();
    for(var i=1;i<=4;i++) {

      var x = objlocations['point' + i + 'x'];
      var y = objlocations['point' + i + 'y'];
      // doesnt' work: var x = 'DBRow.Point0'+i+'X';
      // doesn't work: var y = 'DBRow.Point0'+i+'Y';

      var $PointLocation = jQuery('<img class="PointLocation" id="Grid-Point-' + i + '"' + 'src="../img/points/point.png" width="50px">').css({top:y + 'px', left:x + 'px'});
      $grid.append($PointLocation); 
    }
  });
});

对于变量“x”和“y”,我想循环并直接使用DBRow.PointxX,而不是先将它们手动转储到对象中,因为需要超过60行。

根据代码中的注释,我尝试了var x ='DBRow.Point0'+ i +'X',这导致“x”将“DBRow.Point01X”等作为字符串值。

如果我尝试没有这样的引号:DBRow.Point0 + i + X我收到一个控制台错误,指出X未定义。

我还需要对DBRow.Point ## X上的前导0做一些事情,但我可以在我拉出的数据库中执行此操作。

我是Javascript的新手,所以希望这很简单,我忽略了。

编辑: 最终解决方案

$.get('https://example.com/something/ajax-state?somevar=' + somevar, function(data) {

  $.each(data, function(index,DBRow){

    var $grid = jQuery('#MyDiv');
    $grid.empty();
    for(var i=1;i<=32;i++) { 

      var ii = ('00'+i).slice(-2);

      var x = DBRow["Point"+ii+"X"];
      var y = DBRow["Point"+ii+"Y"];

      var $PointLocation = jQuery('<img class="PointLocation" id="Grid-Point-' + i + '"' + 'src="../img/points/point.png" width="50px">').css({top:y + 'px', left:x + 'px'});
      $grid.append($PointLocation); 
    }
  });
});

2 个答案:

答案 0 :(得分:1)

移动评论以回答更多解释。

javascript中的对象可以像命名数组项一样访问。

DBRow.Point01X与DBRow [&#39; Point01X&#39;]

相同

您可以创建一个循环,准备名称然后插入到数组中。

例如:

i = (i < 10) ? ("0" + i) : i; // for leading zeros
var point = 'Point' + i + 'X';

objlocations['point'+i+'x'] = DBRow[point];

答案 1 :(得分:0)

 for(var i=1;i<=4;i++) {
      var xProperty = "Point0" + i + 'X';
      var yProperty = "Point0" + i + 'Y';
      var x = DBRow[xProperty];
      var y = DBRow[yProperty];
      var $PointLocation = jQuery('<img class="PointLocation" id="Grid-Point-' + i + '"' + 'src="../img/points/point.png" width="50px">').css({top:y + 'px', left:x + 'px'});
      $grid.append($PointLocation); 
    }

由于属性是可变的而不是文字属性,因此您必须使用括号表示法而不是点符号