1. ホーム
  2. javascript

[解決済み] ネストされたオブジェクトをフラット化するワンライナー

2022-03-12 03:32:40

質問

ネストしたオブジェクトをフラット化したいのですが、どうすればいいですか?ワンライナーが必要です。この処理の正しい用語が何なのかわからない。 私は純粋なJavascriptまたはライブラリを使用することができます、私は特にアンダースコアが好きです。

私は ...

{
  a:2,
  b: {
    c:3
  }
}

そして、私は欲しい...

{
  a:2,
  c:3
}

試してみたが.

var obj = {"fred":2,"jill":4,"obby":{"john":5}};
var resultObj = _.pick(obj, "fred")
alert(JSON.stringify(resultObj));

これは動作しますが、私はこれを動作させる必要があります....

var obj = {"fred":2,"jill":4,"obby":{"john":5}};
var resultObj = _.pick(obj, "john")
alert(JSON.stringify(resultObj));

解決方法は?

はい、どうぞ。

Object.assign({}, ...function _flatten(o) { return [].concat(...Object.keys(o).map(k => typeof o[k] === 'object' ? _flatten(o[k]) : ({[k]: o[k]})))}(yourObject))

要約: 1 プロパティオブジェクトの配列を再帰的に作成し、それらをすべて Object.assign .

これは、以下のような ES6 の機能を使用しています。 Object.assign やスプレッド演算子を必要としないように書き換えるのは簡単なはずです。

一行のおかしさは気にせず、実際に読める方がいいという人のために(読みやすさの定義にもよりますが)。

Object.assign(
  {}, 
  ...function _flatten(o) { 
    return [].concat(...Object.keys(o)
      .map(k => 
        typeof o[k] === 'object' ?
          _flatten(o[k]) : 
          ({[k]: o[k]})
      )
    );
  }(yourObject)
)