JavaScriptでオブジェクトの値(value)を条件で絞り込んで新規オブジェクトを作りたい

タイトルわかりにくいシリーズ

元オブジェクトから条件に合うvalueのものだけを絞り込んだ新規オブジェクトを作りたい。

const dataObject = {
  hoge: 'hoge',
  fuga: 'fuga',
  piyo: 'piyo',
  empty: '',
  none: '',
  gogo: 'gogo'
}

// ↓ 空文字('')じゃないものだけを絞り込んでこういうオブジェクトを作りたい ↓

const dataFiltered = {
  hoge: 'hoge',
  fuga: 'fuga',
  piyo: 'piyo',
  gogo: 'gogo'
}

例として空文字('')を含むkeyがあるオブジェクトから、空文字じゃないものだけを抽出したい。

解決方法

stackoverflow.com

ありがとうStackoverflow……🙏

const dataObject = {
  hoge: 'hoge',
  fuga: 'fuga',
  piyo: 'piyo',
  empty: '',
  none: '',
  gogo: 'gogo'
}

const dataFiltered = Object.keys(dataObject)
                           .filter(key => dataObject[key] !== '') // valueが空文字('')のkeyを除く
                           .reduce((obj, key) => {
                             obj[key] = dataObject[key]
                             return obj
                           }, {})


// ↓ 元のオブジェクト
// dataObject {hoge: "hoge", fuga: "fuga", piyo: "piyo", empty: "", none: ""}

// ↓ フィルター後、元オブジェクトを変更せず新規オブジェクトができている!
// dataFiltered {hoge: "hoge", fuga: "fuga", piyo: "piyo", gogo: "gogo"}

よかったですね、もっと直感的にやる方法があるような気がしているけど思いつかない…Immutable.jsとか使えばよい?(よくわかっていない)