簡體   English   中英

如何在函數內使用array.push

[英]How to use array.push inside a function

我試圖將符合兩個if語句的數字數組返回數組。 提示來自leet代碼“ Self Dividing Numbers”,並要求輸入兩個參數,即下限和上限,並檢查該范圍內的每個數字是否可被每個單個數字的數字整除。

當我console.log(num)(注釋掉的部分時,我得到了正確的數字列表,但不是數組格式。要解決此問題,我想在將數組推入result之后添加變量,result和return result) for循環,但是,當我這樣做時,我只會得到數組中的第一個正確術語,而不是整個數組。

如何解決? 我曾嘗試將return語句移動到各個位置,但這並不能解決問題。

該函數應返回[1、2、3、4、5、6、7、8、9、11、12、15、22];

 function selfDividingNumbers(left, right) { for (let j = left; j <= right; j++) { let num = j; let result = [] let strNum = num.toString(); let dividingDigit = 0; for (let i = 0; i < strNum.length; i++) { if (num % parseInt(strNum[i]) == 0) { dividingDigit++; } if (dividingDigit == strNum.length) { result.push(num) //console.log(num) } } return result } }; console.log(selfDividingNumbers(1, 22)); 

從預期的輸出中,在函數的頂部定義result ,然后僅在完全迭代兩個循環之后才返回:

 function selfDividingNumbers(left, right) { let result = [] for (let j = left; j <= right; j++) { let num = j; let strNum = num.toString(); let dividingDigit = 0; for (let i = 0; i < strNum.length; i++) { if (num % parseInt(strNum[i]) == 0) { dividingDigit++; } if (dividingDigit == strNum.length) { result.push(num) //console.log(num) } } } return result }; console.log(selfDividingNumbers(1, 22)); 

為了更簡潔,您可以使用.filter檢查。位數是否.every

 function selfDividingNumbers(left, right) { return Array.from( { length: right - left }, (_, i) => i + left ) .filter((num) => { const digits = String(num).split(''); if (digits.includes(0)) { return false; } return digits.every(digit => num % digit === 0); }); } console.log(selfDividingNumbers(1, 22)); 

當在for循環內聲明let result = [] ,您將告訴您的代碼每次循環迭代時都要重新創建此數組,從而刪除所有推入其中的先前結果。 相反,您需要將其移到for循環之外以阻止這種情況的發生。

最后,您僅需要在外部for循環完成后才return ,因為在for循環內部返回將使函數停止運行(從而停止循環)。

請參見下面的工作示例:

 function selfDividingNumbers(left, right) { let result = []; for (let j = left; j <= right; j++) { let num = j; let strNum = num.toString(); let dividingDigit = 0; for (let i = 0; i < strNum.length; i++) { if (num % parseInt(strNum[i]) == 0) { dividingDigit++; } if (dividingDigit == strNum.length) { result.push(num) } } } return result }; console.log(selfDividingNumbers(1, 22)); 

暫無
暫無

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

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