オブジェクト配列を階層データ構造に変換する

サム・ローリッヒ

オブジェクトの配列があり、それを別の配列に変換したいと思います。元の配列の各オブジェクトにはカテゴリキーがあり、最終結果でオブジェクトをカテゴリ別にグループ化したいと思います。これを行うためにreduceメソッドを使用しようとしていますが、見つけた例を理解できません。

元の配列:

[
  {category: "film", title: "toy story"}, 
  {category: "film", title:"harry potter"},
  {category: "tv", title:"seinfeld"}
]

望ましい結果:

[
  {
    category: "film",
    children: [
      {title: "toy story"}, 
      {title: "harry potter"}
    ],
  }
  {
    category: "tv",
    children: [
      {title: 'seinfeld' }
    ]
  }
]

d3を使用していくつかのグラフを作成しようとしていますが、データを階層構造で並べ替える必要があります。詳細については、https://github.com/d3/d3-hierarchy/blob/v1.1.9/README.md#hierarchyをご覧ください。

Eugen Sunic

reduce関数を使用し、最初にアイテムが配列にすでに存在するかどうかを確認します。存在する場合は、見つかったインデックスを使用して要素を見つけ、その子に追加します。存在しない場合は、最初のアイテムを子配列に追加します。

const input = [{
    category: "film",
    title: "toy story"
  },
  {
    category: "film",
    title: "harry potter"
  },
  {
    category: "tv",
    title: "seinfeld"
  }
]




const result = input.reduce((acc, x) => {
  const index = acc.findIndex(y => y.category === x.category)
  if (index >= 0) {
    acc[index].children.push({
      title: x.title
    })
  } else {
    acc = [...acc, {
      category: x.category,
      children: [{
        title: x.title
      }]
    }]
  }
  return acc;
}, []);

console.log(result)

子の重複がない場合:

const result = input.reduce((acc, x) => {
  const index = acc.findIndex(y => y.category === x.category)
  const indexTitle = acc[index] && acc[index].children.findIndex(y => y.title === x.title)
  if (index >= 0) {
    if (indexTitle !== 0) {
      acc[index].children.push({
        title: x.title
      })
    }
  } else {
    acc = [...acc, {
      category: x.category,
      children: [{
        title: x.title
      }]
    }]
  }
  return acc;
}, []);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

nodejsで配列/オブジェクトデータの階層構造を作成するにはどうすればよいですか?

nodejsで配列/オブジェクトデータの階層構造を作成するにはどうすればよいですか?

jsonオブジェクトの配列をd3階層ツリー構造に準備する方法

フラット データを内部オブジェクトを使用して階層型に変換する JavaScript

データオブジェクトを構造体の配列に変換します

オブジェクトを階層付きの配列に変換します

オブジェクト配列を親子階層の2D配列に変換する方法は?

オブジェクトデータを文字列配列に変換するjquery

フラットなJavaScriptオブジェクト配列をネストされた階層JSON構造に変換するにはどうすればよいですか?

オブジェクトのデータの配列を、ネストされたオブジェクトと配列のより意味のある構造に変換するにはどうすればよいですか?

データ属性配列をオブジェクトに変換する

フラットなjsonオブジェクトを階層的なd3オブジェクト構造に変換します

オブジェクトの配列をJavaScriptのキー値構造に変換

オブジェクトの配列の構造を変換する

C#を使用してデータテーブルを階層データ構造(JSON)に変換する

オブジェクトの配列を異なる構造を持つ別のオブジェクトの配列に変換する

階層構造内にあるオブジェクトに属するオブジェクトの合計

データの構造を変換し、REACTでHTMLを渡す[オブジェクトオブジェクト]?

親/子構造をオブジェクトに変換する

Excelからの列単位のJSONデータをPythonを使用して階層構造に変換する

フラット構造を階層構造に変換する

複雑な配列オブジェクト構造からデータをフェッチする方法は?

オブジェクト配列を新しい配列構造に変換します

データのオブジェクトをオブジェクトの配列に再構築する方法は?

他のデータを保持しながら、オブジェクトの配列内のオブジェクトを配列に変換する

オブジェクトをオブジェクト配列パターンに変換する

オブジェクト構造の配列を変換します

オブジェクトの配列の構造を変換します

多数のデータベース結果をjavascriptのオブジェクトの配列に変換する

TOP 一覧

  1. 1

    PyCharmリモートインタープリターはプロジェクトタブにサイトパッケージのコンテンツを表示しません

  2. 2

    <p:fieldset>の凡例に<h1>、<h2>タグを配置するにはどうすればよいですか?

  3. 3

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  4. 4

    パンダは異なる名前の列に追加します

  5. 5

    Railsで宝石のレイアウトを使用するにはどうすればよいですか?

  6. 6

    Java文字列の仕組み

  7. 7

    Chromeウェブアプリのウェブビューの高さの問題

  8. 8

    CSSのみを使用して三角形のアニメーションを作成する方法

  9. 9

    httpListenerコールバックが2回呼び出されます

  10. 10

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  11. 11

    初期化時にextern / static変数のタイプを指定する必要があるのはなぜですか?

  12. 12

    ファイルがgitlfsに正しくアップロードされるかどうかを確認するにはどうすればよいですか?

  13. 13

    Grouping data with datatable with ASP.NET

  14. 14

    Ecto - migrate table column into its own join table (shifting the DATA to the new tables)

  15. 15

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  16. 16

    Python / SciPyのピーク検出アルゴリズム

  17. 17

    PictureBoxで画像のブレンドを無効にする

  18. 18

    ディスパッチ不可能なハンドルが64ビットプラットフォームでptrを使用するのはなぜですか?

  19. 19

    アクティブな管理者で関連するモデルのドロップダウンメニューの問題を解決する方法

  20. 20

    Windows 7では、一部のプログラムは「ビジュアルテーマを無効にする」レジストリ設定を行いませんか?

  21. 21

    文字列内のすべての単語に一致する正規表現

ホットタグ

アーカイブ