<-- 要求说明 -->

过滤数组假值

(真假美猴王)

删除数组中的所有假值。

在JavaScript中,假值有falsenull0""undefinedNaN

当你完成不了挑战的时候,记得开大招'Read-Search-Ask'。

这是一些对你有帮助的资源:

  • Boolean Objects
  • Array.filter()

<-- 自己理解 -->

这里的Boolean()是新知识点,先学习了一下Boolean()方法:

new Boolean(value)  //  value可选

如果value值不是布尔值,则会将其转换为布尔值。如果省略value,或者value的值为0,-0,null,false,NaN,undefined或者空字符串(“”),则生产的Boolean对象的值为false。如果传入的参数是 DOM 对象  document.all,也会生成值为 false 的 Boolean 对象。任何其他的值,包括值为 "false" 的字符串和任何对象,都会创建一个值为 true 的 Boolean 对象。

注意:不要将基本类型中的 布尔值true和false 与 值为true和false的Boolean对象 弄混了。

当Boolean对象用于条件语句的时候(直接应用月条件语句),任何不是undefined和null的对象,包括值为false的Boolean对象,都会被当做true来对待,如下面代码:

var x = new Boolean(false);
if(x){// 这里的代码会被执行
}

基本类型的布尔值不受此规则影响,如下面代码:

var x = false;
if(x){//  这里的代码不会被执行
}

不要用创建Boolean对象的方式将一个非布尔值转化成布尔值,直接将Boolean当做转换函数来使用即可,如下面代码:

var x = Boolean (expression );          // 推荐
var x = new Boolean( expression )   // 不太好

如果在条件判断语句中直接使用Boolean作为转换函数,代码如下:

var x = Boolean( false );
if(x){//  这里的代码不会被执行
}

该实例中可以使用Boolean对象将数组中的所有元素进行判断,Boolean对象返回false即为数组中的价值。

使用for循环进行遍历,将数组中的每一个值依次传入Boolean函数,返回false则对该值进行删除操作。

delete和splice()都可以实现数组删除的操作,但是delete仅将值设为undefined,数组的length不变,这里需要使用splice()。

<-- 遇到的问题 -->

无论使用for循环还是使用filter()都不会得到正确结果,恍然大悟,使用splice()删除后,数组长度发生变化,再次回到for循环或filter中,整个遍历的会受到影响,会存在删除一个后就会跳过一个值,是遍历造成混乱。

<-- 代码实现 -->

解决方法一:

遇到的问题主要是删除前面的数组元素后,后面的索引值会前移,导致遍历混乱,如果从后面开始遍历,那么对前面的索引值就不会产生影响。代码如下:

function bouncer( item ){for( var i=arr.length-1; i>=0; i-- ){if( Boolean( arr[i] ) == false ){arr.splice( i, 1 );}}return arr;
}

解决方法二:

filter()为数组中的每个元素调用一次 callback 函数,并利用所有使得 callback 返回 true 或 等价于 true 的值 的元素创建一个新数组。

可以将数组每个值传递给Boolean,返回的true或false再作为filter()的callback的参数,返回false不处理,返回true则将所对应的值存入一个数组中,最后遍历结束,将所有真值传递到一个数组中并return,等同于将价值删除。

代码实现:

function bouncer( arr ){return arr.filter( function( item, index, array ){return Boolean( item );})
}

<-- 知识点总结 -->

Boolean()

filter()

delete和splice()删除数组

转载于:https://www.cnblogs.com/daleizi147/p/8445840.html

Falsy Bouncer(第二种解决方式)相关推荐

  1. redis连接不上,两种解决方式

    今天某个项目的redis连不上了,将自己用到的两个解决办法写篇记录(实际使用时方法二选一即可). redis连接不上,两种解决方式 一.首先排查本地redis连接有没有问题 1. 在服务器上查看red ...

  2. JS 跨域问题常见的五种解决方式

    JS 跨域问题常见的五种解决方式 一.什么是跨域? 要理解跨域问题,就先理解好概念.跨域问题是由于javascript语言安全限制中的同源策略造成的. 简单来说,同源策略是指一段脚本只能读取来自同一来 ...

  3. chrome拦截弹窗问题的两种解决方式

    chrome拦截弹窗问题的两种解决方式 参考文章: (1)chrome拦截弹窗问题的两种解决方式 (2)https://www.cnblogs.com/CaiDaili/p/9228455.html ...

  4. java方法生命周期_Java线程的第二种实现方式以及生命周期

    上篇中我们了解了Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步, ...

  5. Docker学习总结(44)——Docker容器时间与主机时间不一致的三种解决方式

    分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程 问题 我们在使用docker时发现Docker容器时间与主机时间经常出现不一致的情况 ...

  6. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):的三种解决方式

    在使用mybatis-plus自定义SQL的时候,没有使用注解方式,而是将SQL语句写在mappper.xml文件中,就报了这个错:org.apache.ibatis.binding.BindingE ...

  7. html设置背景颜色无效,设置背景颜色无效果(第二种实现方式 背景颜色设置不起作用)...

    body{ /* 第一种实现方式 background-color:#C0C0C0; /* 设置背景颜色为黑色 */ background-image:url('PHPCHINA.png');   / ...

  8. Eclipse SVN 冲突的 介绍 及 四种解决方式

    1.为什么会出现冲突 <1>两个开发人员,Harry和Sally,分别从服务器端下载了文件A. <2>Harry修改之后,A变成了A',Sally修改之后,A变成了A" ...

  9. 开灯关灯问题的两种解决方式(数学建模线性代数的应用和编程实现)

    开灯关灯问题的两种解决方式 1.问题介绍 2.编程实现算法及其代码(详细) 3.就该题进行数学建模–体验线性代数的使用 1.问题介绍 有一个按钮组成的矩阵,其中每行有5个按钮,共5行.每个按钮旁边有一 ...

最新文章

  1. JS 总结之函数、作用域链
  2. java 如何知道对象是否被修改过_Java 并发编程:AQS 的原子性如何保证
  3. 一篇文章带你了解Cloud Native
  4. 全系标配!Redmi K40系列锁定三星E4材质OLED屏幕
  5. SAS Viya应用简介
  6. 现阶段硕士的困境:读博没决心,不读也闹心…
  7. latex数学公式转换器
  8. 郭天祥10天学会单片机笔记学习资料(1.1)
  9. 语c语言描写,【自由の翼】语c介绍
  10. 【时间之外】原来春节抽红包是这样实现的
  11. 概念模型,逻辑模型,物理模型
  12. TI杯基于FDC2214的手势识别设计(黑龙江省赛)
  13. 邮件发送-JavaWeb
  14. 高等代数学习笔记(一)多项式——数域
  15. 时钟树综合(CTS)
  16. Java面试题以及答案--- MongoDb
  17. qt phonon 制作音乐播放器学习(怎样让播放进度条和音乐播放时长同步)
  18. 百练+二叉树操作+直接找到父节点,然后交换左右儿子,递归
  19. 【全套】Android零基础入门教程(知识精讲+强化实战)
  20. 数据库 查询计算机系姓王,数据库上机实验报告——SQL Server 2008 简单查询.doc

热门文章

  1. k-gram 拼写校正 java_拼写纠错-基于lucene-ngram实现拼写纠错
  2. junit 测试似有方法_Spring整合Junit的使用
  3. mysql server uuids_master and slave have equal MySQL server UUIDs 解决方法
  4. 信息系统服务器数量设置,《系统下服务器设置与优化.doc
  5. python dataframe取一列_python - 从pandas DataFrame列标题中获取列表
  6. matplotlib 显示批量图片_chapter4-1 简单数据可视化包Matplotlib整理1
  7. 传统的6d位姿估计fangfa1_你的厨房被水淹了!别担心,这只是3D深度估计做出的特效...
  8. java抽象类与接口区别6_java基础知识(6)---抽象类与接口
  9. 路径前缀是什么意思_Trie 树是什么样的数据结构?有哪些应用场景?
  10. 请简单叙述微型计算机的诞生,2012湖南省计算机等级考试试题 二级C试题考资料...