JavaScript オブジェクト内にundefined
あるすべての属性を削除するにはどうすればよいですか?null
(質問はこれです配列の場合
ベストアンサー1
ES10/ES2019の例
シンプルなワンライナー (新しいオブジェクトを返す)。
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 && delete obj[k]);
単一の宣言 (指定されたオブジェクトを変更しない)。
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 }),
{}
);
}
上記の関数と同じですが、命令型(非関数型)スタイルで記述されています。
function removeEmpty(obj) {
const newObj = {};
Object.entries(obj).forEach(([k, v]) => {
if (v === Object(v)) {
newObj[k] = removeEmpty(v);
} else if (v != null) {
newObj[k] = obj[k];
}
});
return newObj;
}
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;
}, {});
}