JavaScript while循环没有'不能在有条件的情况下工作

JavaScript while loop doesn't work with condition

本文关键字:不能 有条件 工作 情况下 循环 while JavaScript      更新时间:2023-09-26

我创建了一个名为getIndex的函数,用于获取我从数组中搜索的索引

当我更改while (1)而不是while (max < min)时,循环正在工作,但条件为(while (max < min)),返回-1。但我需要条件来检查我的搜索是否不在data数组中。为什么它在有条件的情况下返回-1?

// assume my array looks-like this.
var data = [1, 2, 3, 4, 5, 7, 8, 9, 10];
function getIndex(search, arr) {
    var min, max, guess, count;
    min = 0;
    max = arr.length - 1;
    count = 0;
    // If my search is not present in array. Return -1.
    while (max < min) {
        count++;
        guess = Math.floor((min + max) / 2);
        if (arr[guess] === search) {
            return guess;
        } else if (arr[guess] < search) {
            min = guess + 1;
        } else {
            max = guess - 1;
        }
    }
    return -1;
}
getIndex(8, data); // return -1

将while条件更改为while(max>min)

你在这里犯了一个错误。你检查Max是否小于min,而在循环中你将min值设置为0,将Max设置为数组长度。那么Max怎么能小于min呢?由于条件为false,所以不进入循环是正确的。在这种情况下,你需要"最小值小于最大值"或"最大值大于最小值"(两者都有相同的用途),这样它就会正常工作。

在while条件中更改最大值和最小值之间的操作

 // assume my array looks-like this.
var data = [1, 2, 3, 4, 5, 7, 8, 9, 10];
debugger;
function getIndex(search, arr) {
    var min, max, guess, count;
    min = 0;
    max = arr.length - 1;
    count = 0;
    // If my search is not present in array. Return -1.
    while (max > min) {
        count++;
        guess = Math.floor((min + max) / 2);
        if (arr[guess] === search) {
            return guess;
        } else if (arr[guess] < search) {
            min = guess + 1;
        } else {
            max = guess - 1;
        }
    }
    return -1;
}
getIndex(8, data); // return -1

您可以使用for循环,更容易理解

// assume my array looks-like this.
var data = [1, 2, 3, 4, 5, 7, 8, 9, 10];
function getIndex(search, arr) {
    var guess = -1;
    // If my search is not present in array. Return -1.
	
	for(var i=0;i<arr.length;i++){
		if(arr[i]===search)guess = i;
	}
	return guess;
}
console.log(getIndex(8, data)); // return -1