首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数组中删除falsy值

从数组中删除falsy值
EN

Stack Overflow用户
提问于 2018-12-24 20:33:07
回答 5查看 569关注 0票数 3

我在freeCodeCamp学习,目前正在学习基本算法。我正在做虚假保镖练习,您需要从数组中删除所有虚假值。遗憾的是,只有高级的任务答案,即使用filter()方法。我已经决定做一个基本的,但目前还停留在。

代码语言:javascript
复制
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。

函数,确实删除了假值,但我只剩下这三个句点(,,,)。有没有一种方法可以使这个函数更正确地工作,并且在没有这些周期的情况下返回真实的值,同时又不失去函数的简单性?感谢你的帮助。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-12-24 20:45:48

由于您是Javascript的新手,并且需要您的代码来工作,而不是使用不同的解决方案,所以您可以这样做。

删除delete arr[i];并用arr.splice(i,1); i--;替换它

这将删除i第四位置中的项目,而1表示从i第四位置删除1项。由于i中的元素被移除,所以其中有一个新的元素。我们需要再从那里继续下去。因此,我们需要添加i--。否则,在下一次迭代中,它将从下一个元素开始,而不是从i第四个位置开始。

代码语言:javascript
复制
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]));
票数 2
EN

Stack Overflow用户

发布于 2018-12-24 20:38:05

delete只对对象工作。filter会做你想做的事:

代码语言:javascript
复制
const arr = [7, "ate", "", false, 9]

console.log(arr.filter(x => x))

filter只保留函数返回true的数组中的那些元素--在这里,我使用x => x,因为您只需要真正的元素。

票数 5
EN

Stack Overflow用户

发布于 2018-12-24 20:47:19

这就行了

代码语言:javascript
复制
var m = arr.filter(Boolean);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53917474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档