[英]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.