そのため、オブジェクトに含まれる無効なプロパティ(空文字、null、undefinedなど)など任意の条件でプロパティを削除する関数をつくった。
無効なプロパティをすべて削除する
// removeObject.js
function removeObjectBy(object, condition) {
// lodash#cloneDeep
const _obj = _.cloneDeep(object);
const _cond = typeof condition === 'function' ? condition : function () {};
function _remove (obj) {
for (let o in obj) {
if (_cond(obj[o])) {
delete obj[o];
} else if (typeof obj[o] === 'object') {
_remove(obj[o]);
}
}
}
_remove(_obj, _cond);
return _obj;
}
// この条件に合致するプロパティを削除する
const isEmpty = val => val === '' || val === null || val === undefined;
const actual = removeObjectBy(object, isEmpty);
ネストされたオブジェクトのすべての要素に再帰的にアクセスし、条件に合致するプロパティを削除している。isEmptyの部分を const isNumber = val => typeof val === 'number'; にすれば数値のプロパティだけを削除することもできる
すべての要素にアクセスする方法について、詳しく知りたい方は以下の記事を参照してほしい。
また、今回はディープコピーするためだけにlodashを使っている。
ES6から実装されたObject.assignはシャローコピーなので、ライブラリを使うか関数を自作する対策が必要だ。
ライブラリを使わずにディープコピーする方法は、以下の記事を参照してほしい。
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿