我有簡單的數組[3,7,9],我嘗試以遞歸方式搜索某些值。如果要搜索的值不存在,它將被添加到數組中,否則不會。我正在使用開關盒結構,但面臨嚴重問題。javascript switch語句跳回
首先搜索值2.一切都很好,直到函數返回。由於某些原因代碼跳回到休息狀態;在「情況a:」中的行。然後將itemFound設置爲'undefined'。爲何發生這種跳躍?
搜索值5跳回去;在「情況b:」中,並且再次itemFound獲得值「未定義」。
與其他值有更多的跳躍。
我確實希望代碼只做一個開關櫃並退出條件。
myArr = [3, 7, 9];
window.onload = init;
function init() {
searchItem(myArr, 2);
searchItem(myArr, 5);
searchItem(myArr, 8);
searchItem(myArr, 10);
searchItem(myArr, 7);
var arrLength = myArr.length;
for (var i = 0; i < arrLength; i++) {
console.log('index ' + i + ' ' + myArr[i]);
// alert(myArr);
}
}
function searchItem(array, itemToSearch) {
var itemFound;
var itemArray = array.slice(0);
var arrLen = itemArray.length;
var midPointIndex = Math.round(itemArray.length/2) - 1;
var midPointVal = itemArray[midPointIndex];
switch (true) {
//case a:
case midPointVal < itemToSearch:
if (arrLen > 1) {
itemArray.splice(0, midPointIndex + 1);
searchItem(itemArray, itemToSearch);
} else {
itemFound = false;
}
break;
//case b:
case midPointVal > itemToSearch:
if (arrLen > 1) {
itemArray.splice(midPointIndex, arrLen - midPointIndex);
searchItem(itemArray, itemToSearch);
} else {
itemFound = false;
}
break;
//case c:
case midPointVal === itemToSearch:
itemFound = true;
break;
}
if (itemFound === false) {
myArr.push(itemToSearch);
myArr.sort();
//arraySort(myArr);
}
console.log('Value ' + itemToSearch + ' found' + ': ' + itemFound);
return itemFound;
}
@Andy:顯然他期望數組被排序。 – Bergi