从javascript对象中提取数据&翻译一些符号

时间:2016-12-01 10:27:40

标签: javascript

我在javascript对象上进行迭代以获取一些已保存的数据。 我在这个函数中测试了孤立的部分,它们正在工作 预期。问题是我的功能试图呈现“修改过的' 数据到另一个函数(" drawBricks()")使用。

为简单起见,以下是功能:

//DrawBricks function
function drawBricks() {
  for(c=0; c<brickColumnCount; c++) {
    for (r=0; r<brickRowCount; r++) {
      if(bricks[c][r].status == 1) {
        var brickX = (c*(brickWidth+brickPadding))+brickOffsetLeft;
        var brickY = (r*(brickHeight+brickPadding))+brickOffsetTop;
        bricks[c][r].x = brickX;
        bricks[c][r].y = brickY;
        ctx.beginPath();
        ctx.rect(brickX, brickY, brickWidth, brickHeight);
        ctx.fillStyle = "#0095DD";
        ctx.fill();
        ctx.closePath();
      }
    }
  }
}

//ActiveLevel()
function activeLevel(){
 var checkLevel;
 var stringLvl
 var levelArray = ['r1','r2','r3'];
 var blocks = [];
 for(i=0; i<=gems.length; i++) {
    if(level == gems[i].id){
        checkLevel = gems[i];           
    }
 }
 levelArray.forEach(function (k) {
    stringLvl = checkLevel.row[k];
    stringLvl = stringLvl.split('');
 });
 for(c=0; c<brickColumnCount; c++){
    blocks[c] = [];
    blocks.push(stringLvl[c]);
    for(r=0; r<brickRowCount; r++){
        blocks[c][r] = { x: 0, y: 0, status: 1 };
        blocks.push(stringLvl[c][r]);
        if(blocks[c][r] == "-"){
            status = 0;
        }
        else if(blocks[c][r] == "*"){
            status = 1;
        }
        bricks = blocks;
    }
 }
 // drawBricks();
}

这是我使用的对象

  var gems = [
  {
    id: 1,
    name: 'Level-1',
    row: {
      r1: '*****',
      r2: '-***-',
      r3: '--*--'
    },
    canPushtoDb: true,
    hideLevel: false,
    status: 1
    //Other gems with corresponding id and name values, havent 
    //added them here to reduce the length of the question
  }

我认为问题在于,虽然我仍在使用drawBrick,但它并不是在阅读 来自activeLevel()的数据。那么,您对activeLevel()的看法是什么?

1 个答案:

答案 0 :(得分:0)

我认为这个问题已经解决了这个问题:

function activeLevel(){
    var checkLevel;                     // Actual level.
    var levelArray = ['r1','r2','r3'];  // string inside object.row.
    var stringLvl = []; 


  gems.forEach(function(value, i) {
    if(gems[i].id == level){
      checkLevel = gems[i].row;
    }
  });

  //console.log("step 1 - checkLevel is:", checkLevel);

  levelArray.forEach(function (value, i) {    
    stringLvl[i] = checkLevel[value].split(''); 
    });

  //console.log("step 2 - stringLvl is:", stringLvl);  

  stringLvl.forEach(function(c, r) {    
    stringLvl[r].forEach(function(value, index) {      
      if(stringLvl[r][index] == "-") {        
        bricks[index][r].status = 0;
      }
      else {        
        bricks[index][r].status = 1;
      }
    });
  });  
  // console.log("step 3 - blocks is:", blocks);
  drawBricks();

}

我仍然在考虑使用C / C ++,但是采用 Ruby 语法,可读性方面的来源更加优雅。