问题描述
这个问题基本上是说迭代一个整数,并评估这个数字是否能被它的左边数整除,如果它是可整除的,则返回一个布尔数组。
73312
我运行了测试,一切都很好,但是有了这个数字 (73312),它在应该返回 false 时返回 true。
预期输出 [false,false,true,true]
实际输出[false,true]
function divisibleByLeft(n) {
let flag = false;
const ansArr = [];
const s = JSON.stringify(n);
const arr = [];
for (let i = 0; i < s.length; i++) {
arr.push(parseInt(s[i]));
};
for (let i = 0; i < arr.length; i++) {
let reminder = arr[i] % arr[i - 1];
if (reminder !== 0) {
ansArr.push(flag);
} else {
flag = true;
ansArr.push(flag);
};
};
return ansArr;
};
console.log(divisibleByLeft(73312));
解决方法
您将 flag
分配给 false
的唯一时间是在函数的开头。当余数也不为 0 时,将其赋值为 false:
if (reminder !== 0) {
flag = false;
ansArr.push(flag);
} else {
或者完全抛弃它并推送布尔值:
if (reminder !== 0) {
ansArr.push(false);
} else {
或者,更简洁地说,将数字映射到一个数字数组并 .map
它,在每次迭代时与数组中的前一个元素进行比较:
function divisibleByLeft(n) {
return [...String(n)].map((num,i,arr) => num % arr[i - 1] === 0)
}
console.log(divisibleByLeft(73312));