簡體   English   中英

JavaScript while 循環不適用於條件

[英]JavaScript while loop doesn't work with condition

我創建了名為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 並且高於 while 循環你將 min 值設置為 0 並將 Max 設置為數組的長度。那么 Max 怎么可能小於 min ? 由於條件為假,不進入循環是正確的。 您需要“最小值小於最大值”或“最大值大於最小值”(兩者都用於相同的目的),然后才能正常工作。

在 while 條件下更改 max 和 min 之間的操作

 // 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM