欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Falsy Bouncer(第二种解决方式)

发布时间:2024/9/5 75 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Falsy Bouncer(第二种解决方式) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

<-- 要求说明 -->

过滤数组假值

(真假美猴王)

删除数组中的所有假值。

在JavaScript中,假值有false、null、0、""、undefined 和 NaN。

当你完成不了挑战的时候,记得开大招'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(第二种解决方式)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。