這只是課程中的一個練習,這個應用程式從 fruits 陣列中選擇一個隨機水果,然后 removeItem() 函式應該從陣列中洗掉那個并回傳修改后的陣列,但是我得到了一個奇怪的輸出,并且該功能不起作用。
問題可以在這里看到
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});
uj5u.com熱心網友回復:
正如 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;
}
uj5u.com熱心網友回復:
有兩個主要問題:
- 您的
for回圈removeItem總是在第一次迭代時回傳 - 當您從中洗掉專案時,您正在修改初始陣列
我還洗掉了所有用于重現您的問題的不必要代碼。請閱讀如何提問以確保您在幫助他人幫助您。
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});
uj5u.com熱心網友回復:
該功能有兩個問題removeItem-
如果亂數不是陣列中的第一項,則函式回傳
not found. 它根本不會在第二個回圈中運行,因為您的函式not found在第一次迭代后回傳。該
splice方法更新原始陣列。當您將 傳遞fruitArray給removeItem方法時,它作為參考傳遞并在函式中使用更新它也splice將更新實際陣列。
從陣列中洗掉專案的最簡單和最安全的方法是 -
function removeItem(importedArray, item) {
const filteredArray = importedArray.filter((each) => each !== item);
if (filteredArray.length === 0) return 'Not Found';
return filteredArray;
}
uj5u.com熱心網友回復:
您的洗掉專案功能無法正常作業。而不是撰寫回圈和拼接陣列來創建一個新的,你應該只使用過濾器方法
function removeItem(importedArray, item) {
let newArray = importedArray.filter(function (element) {
return element !== item;
});
return newArray;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/475762.html
標籤:javascript
上一篇:使某些div消失的功能
