[英]Function always returning same value
我目前正在开发一款游戏,该游戏使用户能够将棋子放置到网格上。 一旦一块被放置在网格上,应该有一些功能可以防止更多的块被添加到相同的网格位置。 以下是我迄今为止为此功能设计的内容。
我遇到的问题是 function 总是返回 false,因此即使放置了船,也可以将碎片不断添加到相同的网格位置。 start
和end
都是 integer 值, direction
是水平或垂直:
const checkIfShipPresent = (direction, start, end) => {
if (direction === 'horizontal') {
for (let i = start; i <= end; i++) {
shipYard.forEach((ship => {
if (ship.position.includes(i)) {
return true;
}
}))
};
return false;
下面的代码说明了我如何尝试测试 function:
const checkIfShipPresent = (direction, start, end) => {
if (direction === 'horizontal') {
for (let i = start; i <= end; i++) {
shipYard.forEach((ship => {
console.log(ship.position)
console.log(i)
console.log(ship.position.includes(i))
if (ship.position.includes(i)) {
console.log("triggered")
return true;
}
}))
};
console.log("firing")
return false;
以下是相关的控制台日志结果(将一艘船放置在网格位置 [0,1,2,3,4] 并单击单元格 0):
gameboardFactory.js:71 (5) [0, 1, 2, 3, 4]
gameboardFactory.js:72 0
gameboardFactory.js:73 true
gameboardFactory.js:75 triggered
gameboardFactory.js:71 (5) [0, 1, 2, 3, 4]
gameboardFactory.js:72 1
gameboardFactory.js:73 true
gameboardFactory.js:75 triggered
gameboardFactory.js:71 (5) [0, 1, 2, 3, 4]
gameboardFactory.js:72 2
gameboardFactory.js:73 true
gameboardFactory.js:75 triggered
gameboardFactory.js:71 (5) [0, 1, 2, 3, 4]
gameboardFactory.js:72 3
gameboardFactory.js:73 true
gameboardFactory.js:75 triggered
gameboardFactory.js:71 (5) [0, 1, 2, 3, 4]
gameboardFactory.js:72 4
gameboardFactory.js:73 true
gameboardFactory.js:75 triggered
gameboardFactory.js:80 firing
如果有船存在,我需要 function 返回 true,但正如您所见,它永远不会脱离循环,因此总是返回 false。
再次仔细查看代码的这一部分 - 特别是return true;
:
for (let i = start; i <= end; i++) {
shipYard.forEach((ship => {
if (ship.position.includes(i)) {
return true;
}
}))
};
return false;
return
从 - 并退出 - function 它在里面。 这是传递给forEach
方法的匿名箭头 function 。 请注意, forEach
实际上忽略了传递给它的回调的任何返回值——它只对传递给它的 function 的任何副作用有用。
如果您希望在if
条件成立时从更广泛的 function 返回true
,则应使用标准for
循环而不是forEach
。 这不涉及任何功能,因此return
将按照您的意愿进行:
for (let i = start; i <= end; i++) {
for (const ship of shipYard) {
if (ship.position.includes(i)) {
return true;
}
}))
};
return false;
(我使用了更简洁for... of
循环形式,但是常规for (let j = 0; j < shipYard.length; j++)
样式循环也可以正常工作。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.