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

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

问题描述:

我在遍历一个javascript对象来获取一些保存的数据。 我测试了此功能中的隔离部分,它们的工作模式为 。问题是我的函数试图将'修改后的' 数据提交给另一个函数(“drawBricks()”)使用。从javascript对象中提取数据并翻译一些符号

为了简单起见,这里的功能是:

//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

你正在设置很多全局变体,不这样做,如果函数需要一些信息,将它作为参数'drawBricks(bricks)'传递。您将在几天后很困惑,当您回到该代码时,会尝试升级它,这也可以帮助您找到错误的位置,因为现在它可以位于页面的任何位置。 –

+0

好吧,这是一个很好的观察,谢谢,我会的。我只是努力测试。我希望重构整个事情,在他们自己的一些先进的状态,但是,谢谢任何方式,这是一个很好的观点! – Hell0

+1

您是否尝试过使用控制台登录变体以查看它们在drawbrick中保存的内容?究竟是什么问题?什么不工作? –

我认为,问题解决了是这样的:

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的语法,可读性源增益,它是更优雅。