我在freeCodeCamp学习,目前正在学习基本算法。我正在做虚假保镖练习,您需要从数组中删除所有虚假值。遗憾的是,只有高级的任务答案,即使用filter()方法。我已经决定做一个基本的,但目前还停留在。
function bouncer(arr) {
//*loops through array*
for (let i = 0; i < arr.length; i++) {
// *if there is a value that is falsy, delete that value from the array*
if (arr[i] == 0 || arr[i] == NaN || arr[i] == null || arr[i] == false || arr[i] == "" || arr[i] == undefined) {
delete arr[i];
}
}
return arr;
}
console.log(bouncer([7, "ate", "", false, 9]));它返回:
7,吃,9。
函数,确实删除了假值,但我只剩下这三个句点(,,,)。有没有一种方法可以使这个函数更正确地工作,并且在没有这些周期的情况下返回真实的值,同时又不失去函数的简单性?感谢你的帮助。
发布于 2018-12-24 20:45:48
由于您是Javascript的新手,并且需要您的代码来工作,而不是使用不同的解决方案,所以您可以这样做。
删除delete arr[i];并用arr.splice(i,1); i--;替换它
这将删除i第四位置中的项目,而1表示从i第四位置删除1项。由于i中的元素被移除,所以其中有一个新的元素。我们需要再从那里继续下去。因此,我们需要添加i--。否则,在下一次迭代中,它将从下一个元素开始,而不是从i第四个位置开始。
function bouncer(arr) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] == 0 || Number.isNaN(arr[i]) || arr[i] == null || arr[i] == false || arr[i] == "" || arr[i] == undefined) {
arr.splice(i, 1);
i--;
}
}
return arr;
}
console.log(bouncer([7, NaN, "ate", "", false, 9]));发布于 2018-12-24 20:38:05
delete只对对象工作。filter会做你想做的事:
const arr = [7, "ate", "", false, 9]
console.log(arr.filter(x => x))filter只保留函数返回true的数组中的那些元素--在这里,我使用x => x,因为您只需要真正的元素。
发布于 2018-12-24 20:47:19
这就行了
var m = arr.filter(Boolean);https://stackoverflow.com/questions/53917474
复制相似问题