我正在尝试将“形状”(四个方格的相对坐标集)转换为像素网格:
var grid_center = 6;
var square_size = 20;
l_shape = {
coords: [[-1, 0], [0, 0], [1, 0], [-1, 1]]
}
function draw_shape(shape, grid_location) {
for (coord in shape.coords) {
trans_coord = (grid_location[0] + coord[0]) * square_size;
console.log(trans_coord);
}
}
draw_shape(l_shape, [grid_center - 1, 0]);
预期产出:
100
120
140
160
实际输出:
1000
1020
1040
1060
看起来它可能是自动类型转换的怪异,但我不知道如何。我的所有数字都是实际数字,没有引用字符串。手动输入数学时,我得到了预期的结果:
> (5 + 0) * 20
100
从计算机科学的角度来看,可能有更好的方法可以做到这一点,但我对这些并不感兴趣。我只是想知道为什么上面的程序没有按预期工作。
答案 0 :(得分:1)
for (coord in shape.coords)
会将索引字符串分配给coord
您想要for (coord of shape.coords)
答案 1 :(得分:0)
for (coord in shape.coords)
将返回属性索引器。您需要使用shape.coords[coord]
来访问实际的数字值。
或者您也可以使用forEach
e.g。
var grid_center = 6;
var square_size = 20;
l_shape = {
coords: [
[-1, 0],
[0, 0],
[1, 0],
[-1, 1]
]
}
function draw_shape(shape, grid_location) {
for (coord in shape.coords) {
trans_coord = (grid_location[0] + shape.coords[coord][0]) * square_size;
console.log(trans_coord);
}
// or
shape.coords.forEach(function(coord) {
trans_coord = (grid_location[0] + coord[0]) * square_size;
console.log(trans_coord);
});
}
draw_shape(l_shape, [grid_center - 1, 0]);
答案 2 :(得分:-1)
你在这里迭代的方式有点偏。您正在使用专门用于的for ... in
方法:
for...in
语句迭代对象的可枚举属性...
如果你看coord
'0'
的价值,那么他们就是'1'
,for
等等。这是因为在JavaScript中,数组是足以使var grid_center = 6;
var square_size = 20;
var l_shape = {
coords: [[-1, 0], [0, 0], [1, 0], [-1, 1]]
}
function draw_shape(shape, grid_location) {
shape.coords.forEach(coord => {
trans_coord = (grid_location[0] + coord[0]) * square_size;
console.log(trans_coord);
})
}
draw_shape(l_shape, [grid_center - 1, 0]);
处理它的对象,但这不是你想要的。
你想要的是数组迭代器forEach
。如果您使用ES6,代码看起来像这样:
php artisan migrate:fresh
结果不是您所期望的,但您现在正走在正确的轨道上。