從 Javascript 中的物件中刪除空白屬性
使用 JavaScript 物件時,可能需要刪除未定義或 null 的屬性。這可以幫助清理資料、刪除不必要的欄位或準備儲存物件。根據所使用的 JavaScript 版本,有多種方法可以完成此任務。
ES10/ES2019
在 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
中ES6/ES2015,可以使用以下一行,但請注意,它會改變原始物件而不是建立一個新物件:
Object.keys(obj).forEach((k) => obj[k] == null && delete obj[k]);
或者,以下單一聲明將建立一個新對象而不發生改變原文:
let o = Object.keys(obj) .filter((k) => obj[k] != null) .reduce((a, k) => ({ ...a, [k]: obj[k] }), {});
這可以寫成一個函數well:
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
在ES5/ ES2009,程式碼比較多詳細:
function removeEmpty(obj) { return Object.keys(obj) .filter(function (k) { return obj[k] != null; }) .reduce(function (acc, k) { acc[k] = obj[k]; return acc; }, {}); }
這也可以用命令式風格寫:
function removeEmpty(obj) { const newObj = {}; Object.keys(obj).forEach(function (k) { if (obj[k] && typeof obj[k] === "object") { newObj[k] = removeEmpty(obj[k]); } else if (obj[k] != null) { newObj[k] = obj[k]; } }); return newObj; }
最後,用函數式風格寫的遞歸版本:
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]; return acc; }, {}); }
透過應用這些技術,您可以有效地從不同版本的JavaScript中的物件中刪除空白屬性,確保您的資料乾淨並準備好進一步處理或儲存。
以上是如何從 JavaScript 物件中刪除 Null 和未定義的屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!