![](/img/trans.png)
[英]Is there a nice way in javascript to removing Falsy values from a javascript object (not an array)?
[英]Removing all falsy values from a javascript array, including NaN but excluding 0 and empty strings
我有以下數組:
const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false];
我想filter()
掉除''
和0
之外的所有falsy
值。
我知道有一個有用的速記:
return values.filter(Boolean)
但這會刪除所有falsy
值,包括''
和0
。
我嘗試了以下方法:
return values.filter(value => [NaN, null, undefined, false].indexOf(value) < 0);
它幾乎是正確的......但它不會刪除NaN
。
const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false]; const filteredValues = values.filter(value => [NaN, null, undefined, false].indexOf(value) < 0); console.log(filteredValues);
有什么方法可以達到與上一個示例相同的結果,而且還可以刪除NaN
嗎?
嘗試:
values.filter(value => value || value === '' || value === 0);
NaN
不等於自身(即NaN === NaN
計算結果為 false),因此將它與indexOf
一起使用會失敗。 另一種可以更好地傳達您的目標(“filter() 除 '' 和 0” 之外的所有虛假值)的方法如下:
const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false]; const filteredValues = values.filter(value => value || value === '' || value === 0); console.log(filteredValues);
您還可以考慮使用Set ,因為您可以檢查一個集合是否包含NaN
並且has
的時間復雜度是O(1)
,而不是O(n)
,其中 n 是您需要檢查的項目數:
const values = ['', 0, 'one', NaN, 1, 'two', 2, null, 'three', undefined, 3, false]; const notAllowed = new Set([NaN, null, undefined, false]); const result = values.filter(val => !notAllowed.has(val)); console.log(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.