用于在数组中查找 non-sequential 个槽(孔)的 for 循环方法
for loop method for finding non-sequential slots (holes) in an array
正如标题所说 - 我正在尝试使用 for-loop 或 查找数组中的第一个空(缺失)数字(空洞),如果数组是连续的,例如从 1 到 7,我需要最后一个数组项之后的下一个整数,在本例中为 8.
每次整个迭代只需要一个孔返回找到的值。
当涉及到第一个条件(数组以大于 1 的值开始)时,我的逻辑是正确的,但是从下一个条件到最后一个条件总是被拾取。
简而言之:
- 在 [2,3,4,5,6,7] 的数组中,我需要“1”,我得到了它;
- 在 [1,2,3,4,6,7] 的数组中我需要“5”但我得到“8”。
- 在 [1,2,3,4,5,6,7] 的数组中,我需要“8”,我知道了。
const numbers = [1, 2, 3, 4, 6, 7];
document.getElementById("demo").innerHTML = numbers;
let hole;
holeFinder()
function holeFinder() {
for (let i = 0; i < numbers.length; i++) {
if (numbers[0] > 1) {
/* console.log(numbers[0]) */
hole = 1;
document.getElementById("demo").innerHTML += "<br>1: hole: " + hole;
return hole;
}
if (numbers[i] > 1) {
if ((numbers[i] - numbers[i - 1]) > 1) {
hole = (numbers[i - 1] + 1)
document.getElementById("demo").innerHTML += "<br>2: hole: " + hole;
return hole;
}
if ((numbers[i] - numbers[i - 1]) == 1) {
hole = numbers[numbers.length - 1] + 1;
document.getElementById("demo").innerHTML += "<br>3: hole: " + hole;
return hole;
}
}
}
}
<h2>for loop method for finding non-sequential slots (holes) in an array</h2>
<p id="demo"></p>
我的逻辑有什么问题?
你可以这样做
const arr1 = [1, 2, 3, 4, 6, 7]
const arr2 = [1, 2, 4, 5, 6, 7]
const arr3 = [1, 2, 3, 4, 5, 6, 7]
const findHole = arr => {
for(let i = 0; i < arr.length; i++){
if(arr[i] !== i + 1){
return i + 1
}
}
return arr.length + 1
}
console.log(findHole(arr1))
console.log(findHole(arr2))
console.log(findHole(arr3))
你输入第二个if语句的第二部分
if ((numbers[i] - numbers[i - 1]) == 1) {
hole = numbers[numbers.length - 1] + 1;
document.getElementById("demo").innerHTML += "<br>3: hole: " + hole;
return hole;
}
在循环的第二次迭代中,所以只要你没有在第一个索引处找到洞,它总是return最后一个数组元素增加一个。您应该仅在数组的最后一个元素处检查此条件。
您也可以使用 while 循环并找到缺失的数字来打破循环。
const one = [2, 3, 4, 5, 6, 7];
const two = [1, 2, 3, 4, 6, 7];
const three = [1, 2, 3, 4, 5, 6, 7];
function findHole(numbers) {
let count = 0;
let hole = null;
while (!hole) {
count++
const number = count;
// if the array does not contain number, assign the number
// as the missing hole number
if (!numbers.includes(number)) {
hole = number;
}
}
return hole;
}
document.getElementById("demo").innerHTML += "1: hole: " + findHole(one) + '<br>';
document.getElementById("demo").innerHTML += "2: hole: " + findHole(two) + '<br>';
document.getElementById("demo").innerHTML += "3: hole: " + findHole(three) + '<br>';
<div id="demo"></div>
正如标题所说 - 我正在尝试使用 for-loop 或 查找数组中的第一个空(缺失)数字(空洞),如果数组是连续的,例如从 1 到 7,我需要最后一个数组项之后的下一个整数,在本例中为 8.
每次整个迭代只需要一个孔返回找到的值。
当涉及到第一个条件(数组以大于 1 的值开始)时,我的逻辑是正确的,但是从下一个条件到最后一个条件总是被拾取。
简而言之:
- 在 [2,3,4,5,6,7] 的数组中,我需要“1”,我得到了它;
- 在 [1,2,3,4,6,7] 的数组中我需要“5”但我得到“8”。
- 在 [1,2,3,4,5,6,7] 的数组中,我需要“8”,我知道了。
const numbers = [1, 2, 3, 4, 6, 7];
document.getElementById("demo").innerHTML = numbers;
let hole;
holeFinder()
function holeFinder() {
for (let i = 0; i < numbers.length; i++) {
if (numbers[0] > 1) {
/* console.log(numbers[0]) */
hole = 1;
document.getElementById("demo").innerHTML += "<br>1: hole: " + hole;
return hole;
}
if (numbers[i] > 1) {
if ((numbers[i] - numbers[i - 1]) > 1) {
hole = (numbers[i - 1] + 1)
document.getElementById("demo").innerHTML += "<br>2: hole: " + hole;
return hole;
}
if ((numbers[i] - numbers[i - 1]) == 1) {
hole = numbers[numbers.length - 1] + 1;
document.getElementById("demo").innerHTML += "<br>3: hole: " + hole;
return hole;
}
}
}
}
<h2>for loop method for finding non-sequential slots (holes) in an array</h2>
<p id="demo"></p>
我的逻辑有什么问题?
你可以这样做
const arr1 = [1, 2, 3, 4, 6, 7]
const arr2 = [1, 2, 4, 5, 6, 7]
const arr3 = [1, 2, 3, 4, 5, 6, 7]
const findHole = arr => {
for(let i = 0; i < arr.length; i++){
if(arr[i] !== i + 1){
return i + 1
}
}
return arr.length + 1
}
console.log(findHole(arr1))
console.log(findHole(arr2))
console.log(findHole(arr3))
你输入第二个if语句的第二部分
if ((numbers[i] - numbers[i - 1]) == 1) {
hole = numbers[numbers.length - 1] + 1;
document.getElementById("demo").innerHTML += "<br>3: hole: " + hole;
return hole;
}
在循环的第二次迭代中,所以只要你没有在第一个索引处找到洞,它总是return最后一个数组元素增加一个。您应该仅在数组的最后一个元素处检查此条件。
您也可以使用 while 循环并找到缺失的数字来打破循环。
const one = [2, 3, 4, 5, 6, 7];
const two = [1, 2, 3, 4, 6, 7];
const three = [1, 2, 3, 4, 5, 6, 7];
function findHole(numbers) {
let count = 0;
let hole = null;
while (!hole) {
count++
const number = count;
// if the array does not contain number, assign the number
// as the missing hole number
if (!numbers.includes(number)) {
hole = number;
}
}
return hole;
}
document.getElementById("demo").innerHTML += "1: hole: " + findHole(one) + '<br>';
document.getElementById("demo").innerHTML += "2: hole: " + findHole(two) + '<br>';
document.getElementById("demo").innerHTML += "3: hole: " + findHole(three) + '<br>';
<div id="demo"></div>