簡體   English   中英

可以使用函數在do…while中檢查條件是真還是假。

[英]It's possible to use a function to check if the condition is true or false in do…while?

這是我的代碼。 我要檢查的是在do處理過所有元素。 原因是在kategoriak數組中,只有一個對象具有szint: 1 但是此元素可能位於數組的末尾。 我要執行此過程,直到每個元素的szint不為0。但這無關緊要。 我的問題是,我是在錯誤的做什么while 該代碼應該可以工作,但這是一個無限循環。 有任何想法嗎?

 do{ kategoriak.forEach(elem => { elem.child.forEach(child => { kategoriak.forEach(ell => { if(child === ell.id && elem.szint !== 0){ ell.szint = elem.szint + 1 } }) }) }) } while( () => { kategoriak.forEach(elem => { if(elem.szint === 0){ return true } }) return false } ) 

您可以給while一個函數,但是while不會調用您的函數。 它將功能視為真實價值,因此將不斷地延續下去。 您必須自己調用函數。 但實際上,這是胡說八道,您只需要使用一個結果為truefalse的表達式,在這種情況下,您要查找的是Array.prototype.some

do {
   ...
} while (kategoriak.some(elem => elem.szint === 0));

(我首先不敢說這是否是解決此問題的最佳方法。)

while(...)內部,您定義了一個函數,但未調用它。 因此,函數表達式本身就是條件,始終為真。 您還需要調用函數。

do{
    ...
} while(
    (() => {
      kategoriak.forEach(elem => {
          if(elem.szint === 0){
              return true
          }
      })
      return false
    })(); // Notice the parentheses we use to call the function
)

實現此目的的更好方法是使用Array.prototype.some 當某些元素滿足給定功能時,此方法將返回true。

do {
    ...
} while (kategoriak.some(elem => elem.szint === 0))

暫無
暫無

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

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