[英]why is this for loop not returning the intended output?
這只是課程中的一個練習,這個應用程序從水果數組中選擇一個隨機水果,然后 removeItem() function 應該從數組中刪除那個水果並返回修改后的數組,但我得到一個奇怪的 output, function 不工作。
問題可以看這里
function randomFruit(importedArray) { let random = Math.floor(Math.random() * importedArray.length); return importedArray[random]; } function removeItem(importedArray, item) { for (let i = 0; i < importedArray.length; i++) { if (importedArray[i] === item) { importedArray.splice(i, 1); return [...importedArray.slice(0, i), ...importedArray.slice(i + 1)]; } else { return "not found"; } } } function makeFruitArray() { var foods = ["", "", "", "", ""]; return foods; } let fruitArray = makeFruitArray(); let fruitItem = randomFruit(fruitArray); let remaining = removeItem(fruitArray, fruitItem); console.log({fruitArray, fruitItem, remaining});
removeItem
中有兩個問題 function -
如果隨機數不是數組中的第一項,則 function 返回not found
。 它根本不會運行第二個循環,因為您的 function 在第一次迭代后返回not found
。
splice
方法更新原始數組。 當您將fruitArray
傳遞給removeItem
方法時,它會作為引用傳遞並在 function 中使用splice
更新它也會更新實際數組。
從數組中刪除項目的最簡單和最安全的方法是 -
function removeItem(importedArray, item) {
const filteredArray = importedArray.filter((each) => each !== item);
if (filteredArray.length === 0) return 'Not Found';
return filteredArray;
}
正如 himayan 所說,問題在於 splice 已經改變了數組。
這是我的解決方案:
function removeItem(importedArray, item) {
for (let i = 0; i < importedArray.length; i++) {
if (importedArray[i] === item) {
importedArray.splice(i, 1);
break;
}
}
return importedArray;
}
您的移除項目 function 無法正常工作。 與其編寫循環並拼接數組來創建一個新數組,不如使用filter
方法
function removeItem(importedArray, item) {
let newArray = importedArray.filter(function (element) {
return element !== item;
});
return newArray;
}
有兩個主要問題:
removeItem
中的for
循環總是在第一次迭代時返回我還刪除了用於重現您的問題的所有不必要的代碼。 請閱讀如何提問以確保您正在幫助他人幫助您。
function randomFruit(importedArray) { let random = Math.floor(Math.random() * importedArray.length); return importedArray[random]; } function removeItem(importedArray, item) { for (let i = 0; i < importedArray.length; i++) { if (importedArray[i] === item) { // Don't modify the original array since we want to // display the original fruits return [...importedArray.slice(0, i), ...importedArray.slice(i + 1)]; } } // Error condition goes outside the loop, not inside. return null; } function makeFruitArray() { var foods = ["", "", "", "", ""]; return foods; } let fruitArray = makeFruitArray(); let fruitItem = randomFruit(fruitArray); let remaining = removeItem(fruitArray, fruitItem); console.log({fruitArray, fruitItem, remaining});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.