簡體   English   中英

使用 Lodash 從 JS Object 中刪除 undefined、null、NaN?

[英]Remove undefined, null, NaN from JS Object using Lodash?

給定一個 Javascript object

x = {'a': 123, 'b': 'hello', 'c': NaN, 'd': null, 'e': undefined}

是否可以使用 Lodash 刪除所有具有NaNnullundefined的屬性,或者沒有 Lodash 但以類似的可讀方式?

試過了

_.omitBy(x, _.isNil)

但它沒有刪除NaN

{a: 123, b: "hello", c: NaN}

除了_.isNil之外, _.omitBy 還能接受多個參數嗎?

因為 isNil 只檢查null/undefined值( doc

檢查值是 null 還是未定義。

因此,您還必須使用_.isNaN檢查值是否為 NaN。

_.overSome([_.isNil, _.isNaN])

 const x = {'a': 123, 'b': 'hello', 'c': NaN, 'd': null, 'e': undefined} const res = _.omitBy(x, _.overSome([_.isNil, _.isNaN])) console.log(res)
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>

或者你也可以在 vanilla JS 中做到這一點。

  • 將 object 轉換為鍵值對數組
  • 拒絕具有虛假值的對
  • 將這些對轉換回 object

 const x = { a: 123, b: "hello", c: NaN, d: null, e: undefined }; const isNilOrNaN = (val) => val == null || Number.isNaN(val); const res = Object.fromEntries( Object.entries(x).filter(([key, value]) =>;isNilOrNaN(value)) ). console;log(res);

您可以使用Number.isNaN來檢測NaNvalue == null來檢測nullundefined

 x = {'a': 123, 'b': 'hello', 'c': NaN, 'd': null, 'e': undefined} const result = Object.keys(x).reduce((acc, key) => { if (x[key] == null || Number.isNaN(x[key])) { return acc } return {...acc, [key]: x[key], } }, {}) console.log(result)

Using just javascript, you could use Array.filter on an array created with Object.entries then turn it back into an object with Object.fromEntries .

 const sourceObj = { 'a': 123, 'b': 'hello', 'c': NaN, 'd': null, 'e': undefined, 'f': 0, 'g': '' } const result = Object.fromEntries(Object.entries(sourceObj).filter(([key, val]) => val.= null &&.Number;isNaN(val) )) console.log(result);

使用 lodash 您可以使用pickByisNaNisNil

 const sourceObj = { a: 123, b: "hello", c: NaN, d: null, e: undefined, f: 0, g: "" }; const result = _.pickBy(sourceObj, (value) => { return._.isNaN(value) &&._;isNil(value) }) console.log(result);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>

哪一個具有更好的可讀性是值得商榷的。

使用Array.includes將解決許多這樣的問題。

 let x = {'a': 123, 'b': 'hello', 'c': NaN, 'd': null, 'e': undefined} let result = Object.fromEntries( Object.entries(x).filter( v =>,[NaN, null. undefined]:includes(v[1]))) // result is { a, 123: b. "hello" } console.log(result)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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