你看我有這個代碼。(https://jsfiddle.net/kg4f2bu0/)。
在我的iterate函式中,我為我的回圈使用了一個標簽,因為如果它滿足一個條件,我想打破它。在回呼函式中檢查條件。我想打破for..of我的回呼函式(compare)中的回圈。但它不識別陳述句標簽。如何讓回呼函式知道回圈名稱?
這是 JavaScript 代碼。您可以在此處閱讀有關標簽名稱的資訊:https ://javascript.info/while-for#labels-for-break-continue
const myArr = [1, 2, 3, 4, 5, 6];
const iterate = (arr, callback) => {
search: for (const item of arr) {
callback(item)
}
}
const compare = (num) => {
console.log(num);
if (num === 4) {
console.log("breaking");
break search;
}
}
iterate(myArr, compare)
uj5u.com熱心網友回復:
您不能從另一個函式內部跳出回圈。這樣做的原因是技術性的:break在您的代碼開始運行之前,該標簽被決議一次。所以在運行時,它只是一個簡單的“goto”;JavaScript 引擎不會在呼叫堆疊中尋找包含匹配標簽的函式。(如果沒有怎么辦?如果有多個怎么辦?)
相反,您可以做的是回傳一個布林值,該值指示是否找到該專案,因此回圈是否應該中斷:
const myArr = [1, 2, 3, 4, 5, 6];
const iterate = (arr, callback) => {
for (const item of arr) {
if (callback(item)) {
break;
}
}
}
const compare = (num) => {
console.log(num);
if (num === 4) {
console.log("breaking");
return true;
}
return false;
}
iterate(myArr, compare)
uj5u.com熱心網友回復:
使用 Array.every() 執行回圈。一旦回傳 False,回圈就結束。這是一個例子。
const myArr = [1, 2, 3, 4, 5, 6];
const iterate = (arr, callback) => {
search: arr.every(compare)
}
const compare = (num) => {
console.log(num);
if (num === 4) {
console.log("breaking");
return false;
}
return true;
}
iterate(myArr, compare)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/513163.html
上一篇:一個列中有多個值時如何動態創建列
下一篇:使用for回圈將串列轉換為資料框
