hoge

いわゆるWeb Developerの備忘録

ネストしているObjectを削除して新しいObjectを作成する

Laravel では Request に連想配列が含まれているとエラーが発生するため、exceptを使って任意の連想配列を取り除くことができます。

ただこれは Request 型にあるメソッドなので、$request->user->except(['skills'])のように、ネストされている連想配列に対して処理しようとするとエラーが発生します。

PHP 側で取り除くのが一番ですが、JavaScript を使ってクライアント側でもネストされた Object を取り除くことができます。

removeNesting(obj) {
  return Object.entries(obj).reduce((acc, [key, val]) => {
    if ("object" === typeof val) {
      return acc;
    }
    acc[key] = val;
    return acc;
  }, {});
}

Array 型で任意の value を除去したり、変更を加える場合はfilter()map()を使えばいいのですが、Object 型ではfilter()map()ではうまく処理ができない(?)ため、reduce()を使います。

reduce()は本来配列の値を 1 つの値として利用するとき(配列の値を全て足すなど)に使われますが、初期値を Object 型や Array 型にするとfilter()map()のような使い方も可能です。

今回は初期値に空の Object を与え、処理を繰り返します。value の型が object であった時は Object に新しい値を加えずに返し、それ以外の場合は元の key と value をセットして返します。

多次元配列を 1 次元にするだけであればflatを使えばいいのですが、それでは値が残ってしまうのでこのように取り除くメソッドを用意しました。もう少し綺麗に書ける方法があるといいんですが……


同じカテゴリー(Tech)の記事
上の画像に書かれている文字を入力して下さい
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
ネストしているObjectを削除して新しいObjectを作成する
    コメント(0)