簡體   English   中英

嵌套循環迭代

[英]Nested loop iteration

我正在使用嵌套循環來迭代數組bookingArray 如果bookingArrayroomNumber與第一個循環i的索引匹配,則該bookingArray項應推送到新數組tableArray

我遇到了一個問題, tableArrayelse語句中的多個條目添加到結果tableArray 這可能與break / continue正確用法有關嗎? 我已經閱讀了文檔,但是沒有找到正確的解決方案。

預期結果:

"1: room booked",
"2: room available",
"3: room available",
"4: room available",
"5: room booked",
"6: room available",
"7: room available",
"8: room available",
"9: room booked",
"10: room available"

當前代碼的小提琴:

 var bookingArray = [{ "roomNumber": 1, }, { "roomNumber": 5, }, { "roomNumber": 9, } ]; var tableArray = []; for (var i = 1; i < 11; i++) { for (var j = 0; j < bookingArray.length; j++) { if (i == bookingArray[j].roomNumber) { tableArray.push(bookingArray[j].roomNumber + ": room booked"); break; } else { tableArray.push(i + ": room available"); } } } console.log(tableArray); 

因為對於每個外循環迭代,內循環都會運行多次。 僅使用內循環設置一個標志,一旦完成,然后根據該標志在每個外循環迭代中推送一次:

 var bookingArray = [{ "roomNumber": 1, }, { "roomNumber": 5, }, { "roomNumber": 9, } ]; var tableArray = []; for (var i = 1; i < 11; i++) { var isBooked = false; for (var j = 0; j < bookingArray.length; j++) { if (i == bookingArray[j].roomNumber) { isBooked = true; break; } } var msg = isBooked ? ": room booked" : ": room available"; tableArray.push(i + msg); } console.log(tableArray); 

charlietfl的解決方案是正確的。 或者,使用lodash庫可以大大縮短此代碼。 可以分兩行完成,如下所示

 var bookingArray = [{ "roomNumber": 2, }, { "roomNumber": 5, }, { "roomNumber": 9, } ]; var booked = _.map(bookingArray, 'roomNumber'); var unbooked = _.difference(_.range(11), booked); console.log("Booked:", booked); console.log("Not Booked:", unbooked); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script> 

添加一個外部庫確實要下載一些開銷,但是如果您在應用程序中發現其他一些有用lodash的地方(我通常會這樣做),那么可能值得添加。

我與lodash團隊沒有任何隸屬關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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