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(第二种解决方式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 表的操作(Oracle和DB2)
- 下一篇: 【逆向知识】裸函数(Naked函数)