判断数组是否为因子链
Determining if an array is a factor chain
我很想知道为什么这段代码没有通过某些测试。它有意不使用任何 ES6 代码。
提示如下:
*因子链是一个数组,其中每个前一个元素都是下一个连续元素的因子。以下是一个因子链:
[3, 6, 12, 36]
// 3 is a factor of 6
// 6 is a factor of 12
// 12 is a factor of 36
创建一个函数来确定数组是否为因子链。*
我的代码:
function factorChain(arr) {
var isChain = true;
for (var i = 0; i < arr.length; i++) {
if ((arr[i + 1] / arr[i]) !== Math.floor(arr[i + 1] / arr[i])) {
isChain = false;
}
}
return isChain;
}
您应该循环到 arr.length - 1
,因为您在每次迭代中访问当前索引处的元素和下一个索引处的元素。使用取余运算符检查一个数字是否是另一个数字的因数可以提高代码的清晰度。此外,无需将结果分配给变量;第一次条件不匹配时简单地返回 false 将退出函数。
function factorChain(arr) {
for (var i = 0; i < arr.length - 1; i++) {
if (arr[i+1] % arr[i] != 0) {
return false;
}
}
return true;
}
我很想知道为什么这段代码没有通过某些测试。它有意不使用任何 ES6 代码。
提示如下:
*因子链是一个数组,其中每个前一个元素都是下一个连续元素的因子。以下是一个因子链:
[3, 6, 12, 36]
// 3 is a factor of 6
// 6 is a factor of 12
// 12 is a factor of 36
创建一个函数来确定数组是否为因子链。*
我的代码:
function factorChain(arr) {
var isChain = true;
for (var i = 0; i < arr.length; i++) {
if ((arr[i + 1] / arr[i]) !== Math.floor(arr[i + 1] / arr[i])) {
isChain = false;
}
}
return isChain;
}
您应该循环到 arr.length - 1
,因为您在每次迭代中访问当前索引处的元素和下一个索引处的元素。使用取余运算符检查一个数字是否是另一个数字的因数可以提高代码的清晰度。此外,无需将结果分配给变量;第一次条件不匹配时简单地返回 false 将退出函数。
function factorChain(arr) {
for (var i = 0; i < arr.length - 1; i++) {
if (arr[i+1] % arr[i] != 0) {
return false;
}
}
return true;
}