簡體   English   中英

Function 總是返回相同的值

[英]Function always returning same value

我目前正在開發一款游戲,該游戲使用戶能夠將棋子放置到網格上。 一旦一塊被放置在網格上,應該有一些功能可以防止更多的塊被添加到相同的網格位置。 以下是我迄今為止為此功能設計的內容。

我遇到的問題是 function 總是返回 false,因此即使放置了船,也可以將碎片不斷添加到相同的網格位置。 startend都是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM