從JavaScript 中的物件中刪除空白屬性
在JavaScript 中,物件可以具有未定義或null 的屬性,這可能會使程式碼變得混亂並使工作變得更加困難。為了解決這個問題,我們可以使用各種技術從物件中刪除這些空白屬性。
ES10/ES2019
這些方法使用了Object.fromEntries() 的引入方法:
- 一行:let o = Object. fromEntries(Object.entries(obj).filter(([_, v]) => v != null));
- 與上面相同,但作為一個函數: function removeEmpty(obj) { return Object.fromEntries(Object.entries(obj).filter(([_, v]) => v != null)); }
- 從嵌套物件中刪除項目的遞歸版本: function removeEmpty(obj) { return Object.fromEntries( Object.entries(obj) .filter(([_, v]) => v != null) .map(([k, v]) => [k, v = == Object(v) ? removeEmpty(v) : v]) ); }
ES6/ES2015
- 變異單行:Object.keys(obj).forEach((k) => obj [k] = = null && 刪除obj[k]);
- A非變異版本: let o = Object.keys(obj) .filter((k) => obj[k] != null) .reduce((a, k) => ({ ...a, [ k]: obj[k] }), {});
- 與上方類似,寫成函數: function removeEmpty(obj) { return Object.entries(obj) .filter(([_, v]) => v != null) .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {} ); }
- 處理嵌套物件的遞歸函數: function removeEmpty(obj) { return Object.entries(obj) .filter(([_, v]) => v != null) .reduce( ( acc, [k, v]) => ({ ...acc, [k]: v === Object(v) ? removeEmpty(v) : v }), {} ) ; }
ES5/ES2009
- 函數式非遞歸版本: function removeEmpty(obj) { return Object.keys(obj) .filter function (k) { return obj[k] != null; }) .reduce(function (acc, k) { acc[k] = obj[k]; 回傳acc; }
- 遞歸函數版本: function removeEmpty(obj) { return Object.keys(obj) .filter( function (k) { return obj[k] != null; }) .reduce(function (acc , k) { acc[k] = typeof obj[k] === "object" ?removeEmpty(obj[k]) : obj[k]; ACC; }, {}); }
以上是如何從 JavaScript 物件中刪除 Null 或未定義的屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!