我正在尝试将符合两个if语句的数字数组返回给数组。提示来自leet代码“ Self Divdiving Numbers”,并要求输入两个参数,即下限和上限,并检查该范围内的每个数字是否可被每个单独数字的数字整除。
当我console.log(num)(注释掉的部分时,我得到了正确的数字列表,但不是数组格式。要解决此问题,我想添加一个变量,结果并在推入数组后返回结果会在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));
答案 0 :(得分:0)
从预期的输出中,在函数的非常顶部处定义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));
答案 1 :(得分:0)
在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));