1. ホーム
  2. javascript

[解決済み] Javascript - オブジェクトから未定義のフィールドを削除する [duplicate].

2022-05-09 18:47:52

質問

オブジェクトから未定義のフィールドを削除するきれいな方法はありますか?

すなわち

> var obj = { a: 1, b: undefined, c: 3 }
> removeUndefined(obj)
{ a: 1, c: 3 }

2つの解決策に出会いました。

_.each(query, function removeUndefined(value, key) {
  if (_.isUndefined(value)) {
    delete query[key];
  }
});

または

_.omit(obj, _.filter(_.keys(obj), function(key) { return _.isUndefined(obj[key]) }))

解決方法は?

を使ったワンライナー ES6 arrow関数と三項演算子。

Object.keys(obj).forEach(key => obj[key] === undefined ? delete obj[key] : {});

または ショートサーキット の評価では、3 項目の代わりに (@Matt Langloisさん、情報ありがとうございます!)

Object.keys(obj).forEach(key => obj[key] === undefined && delete obj[key])

同じようにif文を使った例です。

Object.keys(obj).forEach(key => {
  if (obj[key] === undefined) {
    delete obj[key];
  }
});

ネストしたオブジェクトの項目も削除したい場合は 再帰的 関数を使用します。

const removeEmpty = (obj) => {
  let newObj = {};
  Object.keys(obj).forEach((key) => {
    if (obj[key] === Object(obj[key])) newObj[key] = removeEmpty(obj[key]);
    else if (obj[key] !== undefined) newObj[key] = obj[key];
  });
  return newObj;
};