从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()
?
答
我认为,问题解决了是这样的:
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的语法,可读性源增益,它是更优雅。
你正在设置很多全局变体,不这样做,如果函数需要一些信息,将它作为参数'drawBricks(bricks)'传递。您将在几天后很困惑,当您回到该代码时,会尝试升级它,这也可以帮助您找到错误的位置,因为现在它可以位于页面的任何位置。 –
好吧,这是一个很好的观察,谢谢,我会的。我只是努力测试。我希望重构整个事情,在他们自己的一些先进的状态,但是,谢谢任何方式,这是一个很好的观点! – Hell0
您是否尝试过使用控制台登录变体以查看它们在drawbrick中保存的内容?究竟是什么问题?什么不工作? –