【发布时间】:2020-02-17 16:37:55
【问题描述】:
这是非常基本的,但由于某种原因,当数组中没有任何不连续的数字时,我无法弄清楚为什么我无法返回null。当数组不完全连续时,我的代码可以正常工作:
function firstNonConsecutive(arr) {
for (let i = 0; i < arr.length; i++) {
if (arr[i + 1] - arr[i] !== 1) {
return arr[i + 1];
}
}
return null;
}
console.log(firstNonConsecutive([ 0, 1, 2, 3, 4, 6, 7, 8, 9 ]));
但如果数组是连续的,即像这样:
function firstNonConsecutive(arr) {
for (let i = 0; i < arr.length; i++) {
if (arr[i + 1] - arr[i] !== 1) {
return arr[i + 1];
}
}
return null;
}
console.log(firstNonConsecutive([ 6, 7, 8, 9, 10, 11, 12 ]));
您可以看到它返回undefined 而不是null。为什么它不返回null?返回在 for 循环之外。
我尝试创建一个初始检查以查看数组是否不连续,如下所示:
function firstNonConsecutive(arr) {
let newArr = [];
for (let j = arr[0]; j < arr[arr.length - 1]; j++) {
newArr.push(j);
}
//check if arr does not contain consecutive characters
if (String(arr) !== String(newArr)) {
for (let i = 0; i < arr.length; i++) {
if (arr[i + 1] - arr[i] !== 1) {
return arr[i + 1];
}
}
}
else {
return null;
}
}
console.log(firstNonConsecutive([ 0, 1, 2, 3, 4, 6, 7, 8, 9 ]));
但这并没有什么不同。有什么想法吗?
【问题讨论】:
-
i < arr.length然后arr[i + 1]将是未定义的。你会想要i < arr.length - 1 -
你正在迭代整个数组但访问
arr[i + 1],这意味着最后一次迭代的测试总是会失败,然后返回arr[i + 1],即undefined。 -
@Keith 谢谢,是的,这就是答案。
标签: javascript arrays for-loop null