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



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进行一些处理,但是我可以在要从中提取的数据库中执行此操作。

我是Java的新手,所以希望这是我忽略的简单事情。

编辑:
最终解决方案



$.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);
    }
  });
});

最佳答案

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

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

DBRow.Point01X与DBRow ['Point01X']相同

您可以进行一个循环,在该循环中准备名称,然后将其插入数组。

例如:

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

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

关于javascript - 串联Javascript函数的参数名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49062672/

10-10 01:04