Spe*_*e43 4 javascript arrays null for-loop
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 ]));Run Code Online (Sandbox Code Playgroud)
但如果数组是连续的,即像这样:
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 ]));Run Code Online (Sandbox Code Playgroud)
您可以看到它返回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 ]));Run Code Online (Sandbox Code Playgroud)
但这并没有什么区别。有任何想法吗?
我建议从第二项开始,检查元素和之前的元素。
这种方法不会改变要检查的长度,并且忽略了检查不存在元素的问题。
function firstNonConsecutive(arr) {
for (let i = 1; i < arr.length; i++) {
if (arr[i - 1] + 1 !== arr[i]) return arr[i];
}
return null;
}
console.log(firstNonConsecutive([0, 1, 2, 3, 4, 6, 7, 8, 9]));
console.log(firstNonConsecutive([0, 1, 2, 3, 4, 5, 6, 7, 8]));Run Code Online (Sandbox Code Playgroud)