摘要:知道如果我們將輸入數(shù)組中的每個值都轉(zhuǎn)換為布爾值,就可以刪除所有值為的元素,這就滿足了此挑戰(zhàn)的要求。
翻譯:瘋狂的技術(shù)宅
https://medium.freecodecamp.o...
本文首發(fā)微信公眾號:前端先鋒
歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章
引用自 MDN:
falsy(虛值)是在 Boolean 上下文中已認定可轉(zhuǎn)換為‘假‘的值.JavaScript 在需要用到布爾類型值的上下文中使用強制類型轉(zhuǎn)換(Type Conversion )將值轉(zhuǎn)換為布爾值,比如:在條件語句或者循環(huán)語句中。
falsy 有時寫作 falsey
在 JavaScript 中有很多方法可以從數(shù)組中刪除元素,但是從數(shù)組中刪除所有虛值的最簡單方法是什么?為了回答這個問題,我們將仔細研究 truthy 與 falsy 值和類型強制轉(zhuǎn)換。
算法說明從數(shù)組中刪除所有虛值。
JavaScript 中的虛值是 false、 null、 0、 ""、 undefined 和 NaN。
提示:嘗試將每個值轉(zhuǎn)換為布爾值。
function bouncer(arr) { return arr; } bouncer([7, "ate", "", false, 9]);提供的測試用例
bouncer([7, "ate", "", false, 9]) 應(yīng)該返回 [7, "ate", 9]。
bouncer(["a", "b", "c"]) 應(yīng)該返回 ["a", "b", "c"]。
bouncer([false, null, 0, NaN, undefined, ""]) 應(yīng)該返回 []。
bouncer([1, null, NaN, 2, undefined]) 應(yīng)該返回 [1, 2]。
解決方案:.filter( ) 和 Boolean( )理解問題:我們有一個作為輸入的數(shù)組。目標是從數(shù)組中刪除所有的虛值然后將其返回。
freeCodeCamp 上的好心人告訴我們,JavaScript 中的虛值是 false、 null、 0、 ""、 undefined 和 NaN。
他們也給了我們一個重要的提示!他們建議將數(shù)組的每個值轉(zhuǎn)換為布爾值以完成此挑戰(zhàn)。我認為這個提示很不錯!
示例/測試用例:前面提供的測試用例告訴我們,如果輸入數(shù)組只包含虛值,那么應(yīng)該只返回一個空數(shù)組。這非常簡單。
數(shù)據(jù)結(jié)構(gòu):在這里我們將堅持使用數(shù)組。
我們來談?wù)?b>.filter():
.filter()創(chuàng)建一個新數(shù)組,其中包含通過所提供函數(shù)測試的所有元素。
換句話說,.filter() 遍歷數(shù)組中的每個元素并保留通過其中某個測試的所有元素。數(shù)組中未通過該測試的所有元素都被過濾掉了 —— 被刪除了。
如果我們有一個數(shù)組并且只想保留大于 100 的數(shù)字,可以用 .filter() 來實現(xiàn):
let numbers = [4, 56, 78, 99, 101, 150, 299, 300] numbers.filter(number => number > 100) // returns [ 101, 150, 299, 300 ]
我們再來談?wù)勀莻€將每個元素轉(zhuǎn)換為布爾值的提示。這是一個很好的提示,因為我們可以用 .filter() 返回只有真值(truthy)的數(shù)組。
我們將通過JavaScript類型轉(zhuǎn)換來實現(xiàn)這一目標。
JavaScript 為我們提供了將一種數(shù)據(jù)類型轉(zhuǎn)換為另一種的有用函數(shù), String()轉(zhuǎn)換為字符串,Number() 轉(zhuǎn)換為數(shù)字,Boolean() 轉(zhuǎn)換為布爾值。
例如:
String(1234) // returns "1234" Number("47") // returns 47 Boolean("meow") // returns true
Boolean() 是我們完成這個挑戰(zhàn)所需要的函數(shù)。如果提供給 Boolean() 的參數(shù)是真值,那么 Boolean() 將返回 true 。如果提供給 Boolean() 的參數(shù)是虛值,那么 Boolean() 將返回 false。
這對我們非常有用,因為我們從指令中知道只有 false,null,0,"",undefined 和 NaN 在 JavaScript 中是虛值。其他每一個值都是真值。知道如果我們將輸入數(shù)組中的每個值都轉(zhuǎn)換為布爾值,就可以刪除所有值為 false 的元素,這就滿足了此挑戰(zhàn)的要求。
算法:
確定 arr 中的哪些值是虛值。
刪除所有虛值。
返回僅包含真值(truthy)的新數(shù)組。
代碼:
function bouncer(arr) { // Use filter to remove falsy elements from arr. let onlyTruthyValues = arr.filter(element => Boolean(element) === true) // 7 Boolean(7) is true // "ate" Boolean("ate") is true // "" Boolean("") is false // false Boolean(false) is false // 9 Boolean(9) is true // Return the new array. return onlyTruthyValues // [7, "ate", 9] } bouncer([7, "ate", "", false, 9]);
去掉注釋并刪除局部變量:
function bouncer(arr) { return arr.filter(element => Boolean(element) === true) } bouncer([7, "ate", "", false, 9]);
如果你有其他解決方案或建議,請在評論中分享!
12個令人驚嘆的CSS實驗項目
必須要會的 50 個React 面試題
世界頂級公司的前端面試都問些什么
11 個最好的 JavaScript 動態(tài)效果庫
CSS Flexbox 可視化手冊
從設(shè)計者的角度看 React
過節(jié)很無聊?還是用 JavaScript 寫一個腦力小游戲吧!
CSS粘性定位是怎樣工作的
一步步教你用HTML5 SVG實現(xiàn)動畫效果
程序員30歲前月薪達不到30K,該何去何從
14個最好的 JavaScript 數(shù)據(jù)可視化庫
8 個給前端的頂級 VS Code 擴展插件
Node.js 多線程完全指南
把HTML轉(zhuǎn)成PDF的4個方案及實現(xiàn)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/103693.html
摘要:如果我們把非布爾值作為條件呢打開控制臺并運行上述代碼,會打印說明條件為真值。在中,真值指的是在布爾值上下文中轉(zhuǎn)換后的值為真的值。兩個能夠建立元素間一一對應(yīng)的集合稱為互相對等集合。 showImg(https://segmentfault.com/img/bVbtSvt?w=720&h=360); 為了保證可讀性,本文采用音譯而非直譯。 Javascript 一直是神奇的語言。 不相信我...
摘要:注模塊名右邊有小程序圖標即表明可以在小程序中使用。轉(zhuǎn)義字符串為合法的字符串字面量。轉(zhuǎn)義特殊字符用于構(gòu)造函數(shù)。使構(gòu)造函數(shù)繼承另一個構(gòu)造函數(shù)原型鏈上的方法。 導語 Licia 是一套在開發(fā)中實踐積累起來的實用 JavaScript 工具庫。該庫目前擁有超過 300 個模塊,同時支持瀏覽器、node 及小程序運行環(huán)境,提供了包括日期格式化、md5、顏色轉(zhuǎn)換等實用模塊,可以極大地提高開發(fā)效率。...
摘要:當子類繼承了父類并且子類重寫了父類的虛函數(shù)之后,我們可以看到此時子類中虛函數(shù)指針對應(yīng)的虛函數(shù)表中存的是子類經(jīng)過重寫的函數(shù)了。 前言:相信小伙伴們在學習到C++面...
摘要:由于是以空函數(shù)為代理對象,我們可以將執(zhí)行它,觸發(fā)。中會遍歷數(shù)組依次取值,如果發(fā)現(xiàn)無法繼續(xù)取值則,跳出循環(huán)。 本文來自我的博客,歡迎大家去GitHub上star我的博客 我們在取值特別是鏈式取值的時候,常常會遇到Cannot read property xx of undefined的錯誤,如何避免這種情況的發(fā)生呢?這里有幾種方法以供參考 使用成熟的庫方法 這是最簡單的一種手段:只用引入...
閱讀 881·2023-04-26 03:03
閱讀 2206·2021-10-12 10:12
閱讀 1201·2021-09-24 09:48
閱讀 1645·2021-09-22 15:25
閱讀 3332·2021-09-22 15:15
閱讀 914·2019-08-29 16:21
閱讀 1064·2019-08-28 18:00
閱讀 3423·2019-08-26 13:44