簡體   English   中英

從 javascript 數組中刪除所有虛假值,包括 NaN 但不包括 0 和空字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM