如何解决JS练习问题+循环+数组+对象
我正在跟踪练习的教程,但我听不懂逻辑。 初始设置是由2D阵列制成的3x3板。每个嵌套数组将具有3个元素,它们将是具有两个属性的对象:x和y,定义它们在数组中的位置。 (x表示索引,y表示每个元素在嵌套数组中的位置,因此它将为0,1或2,因为每个嵌套数组都有3个元素)。 我们定义了一个将要使用的对象:它将被命名为player,并且现在将x和y属性设置为以下值:
const player = {
x: 1,y: 1
};
因此,现在将对象放置在3x3板的中间,位置为{1,1}
我们的下一个逻辑步骤是开始编写代码并定义一个函数,该函数将允许我们在调用时根据给定的命令(向左或向右)更改播放器在板上的位置。为了影响播放器的属性及其位置,我们的功能必须有权访问播放器对象。另外,我们必须设置一些条件,以免我们的玩家离开董事会。这是我不了解的情况:
if (thePlayer.y >= 0 && thePlayer.y < 2) {
if (command === 'l') {
thePlayer.y--;
} else {
thePlayer.y++;
}
console.log(`Player has position: x=${thePlayer.x},y=${thePlayer.y}`);
} else {
console.log("You can't place player outside of the board!");
}
}
为什么第一个'if'语句表示> = 0而不是> 0?
如果y的值为0,则玩家将位于棋盘的左侧,然后仍可以向左移动(因为等于0),然后退出棋盘。 以下几句话使我完全空白:
现在,如果我们的玩家的属性“ y”小于0,我们将收到一条通知,通知玩家该玩家离开了棋盘,这是不允许的。
这项运动是正确的,但我想了解!
解决方法
这个逻辑对我来说也是错误的,当Y = 0(仍然是正确的位置)时,您将无法移动“玩家”。我想更好,更清晰的解决方案是先检查命令,然后再检查命令是否有效,像这样:
const moveHandlers = {
'l': () => thePlayer.y--,'r': () => thePlayer.y++,}
const validCommands = Object.keys(moveHandlers);
if (!validCommands.includes(command)) {
throw new Error('Invalid command');
}
const invalidLeftMove = command === 'l' && thePlayer.y === 0;
const invalidRightMove = command === 'r' && thePlayer.y === 2;
if (invalidLeftMove || invalidRightMove) {
throw new Error("You can't place player outside of the board!");
}
moveHandlers[command]();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。