繁体   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