ネストされた配列フィルタリング、よりエレガントな方法はありますか?

iamalismith

検索文字列に基づいて、ネストされた構造をフィルタリングしようとしています。

検索文字列がアイテムで一致する場合、そのアイテムをその親とともに構造内に保持したいと思います。

検索文字列が見つからず、アイテムに子がない場合は、割引を受けることができます。

再帰配列フィルターを使用して各項目の子をチェックするコードが機能しています。

const data = {
  id: '0.1',
  children: [
    {
      children: [],
      id: '1.1'
    },
    {
      id: '1.2',
      children: [
        {
          children: [],
          id: '2.1'
        },
        {
          id: '2.2',
          children: [
            {
              id: '3.1',
              children: []
            },
            {
              id: '3.2',
              children: []
            },
            {
              id: '3.3',
              children: []
            }
          ]
        },
        {
          children: [],
          id: '2.3'
        }
      ]
    }
  ]
};


const searchString = '3.3';

const filterChildren = (item) => {
  if (item.children.length) {
    item.children = item.children.filter(filterChildren);
    return item.children.length;
  }
  return item.id.includes(searchString);
};


data.children = data.children.filter(filterChildren);

console.log(data);

/*This outputs:
{
  "id": "0.1",
  "children": [
    {
      "id": "1.2",
      "children": [
        {
          "id": "2.2",
          "children": [
            {
              "id": "3.3",
              "children": []
            }
          ]
        }
      ]
    }
  ]
}*/

データ構造が大きくなると、効率が悪くなるのではないかと心配しています。

これは、進行中のループの量を制限する「より良い」方法で達成できますか?私はおそらくレデューサー/トランスデューサーまたは同様にエキサイティングなものを使用することを考えています:)

ニーナ・ショルツ

子を検索する非変異バージョン。

function find(array, id) {
    var child,
        result = array.find(o => o.id === id || (child = find(o.children, id)));

    return child
        ? Object.assign({}, result, { children: [child] })
        : result;            
}

const
    data = { id: '0.1', children: [{ children: [], id: '1.1' }, { id: '1.2', children: [{ children: [], id: '2.1' }, { id: '2.2', children: [{ id: '3.1', children: [] }, { id: '3.2', children: [] }, { id: '3.3', children: [] }] }, { children: [], id: '2.3' }] }] },
    searchString = '3.3',
    result = find([data], searchString);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

配列内の配列のフィルタリング、これを行うためのエレガントな方法はありますか?

分類Dev

Rでのネストされた操作。よりエレガントな方法はありますか?

分類Dev

関数の失敗した結果をフィルタリングするよりエレガントな方法はありますか?

分類Dev

ネストされたTask.WhenAllsと同等のエレガントな方法はありますか?

分類Dev

C#で配列をネストするためのよりエレガントな方法はありますか?

分類Dev

React Nativeでさまざまなコンポーネントを条件付きでレンダリングするためのより良いまたはよりエレガントな方法はありますか?

分類Dev

このタイプの順列のためのよりエレガントな方法はありますか?

分類Dev

いくつかの列の合計にネストされたランキングを適用するためのよりエレガントな方法

分類Dev

スペースで区切られたテキスト値を整数として読み取り、配列にフロートするよりエレガントな方法はありますか?

分類Dev

よりエレガントな方法はありますか?

分類Dev

JavaScript配列のフィルタリングとマッピングにより、配列エントリの間にコンマが生成されますか?

分類Dev

このビルダーをコーディングするためのよりエレガントな方法はありますか?

分類Dev

MongoDBネストされた配列でフィルタリングする方法

分類Dev

ネストされたSwiftyJSON配列をフィルタリングする方法

分類Dev

ネストされた配列内にキーと値のペアを含まないエントリをフィルタリングするにはどうすればよいですか?

分類Dev

xmlファイルをネストされた配列に解析する簡単な方法はありますか?

分類Dev

SpringマネージドBeanをJavaカスタム/シンプルタグに挿入するエレガントな方法はありますか

分類Dev

この「if」リストをよりエレガントな方法で書く方法はありますか?

分類Dev

モデルがインスタンス化されるたびにプリティプリントのgemがトリガーされないようにする方法はありますか?

分類Dev

特定のグループによる重複/繰り返しエントリを含まないフィルタリングする方法はありますか?

分類Dev

GraphQLクエリフィールドをサブ/ネストされたクエリグループにグループ化する方法はありますか?

分類Dev

Javaでリストを処理するよりエレガントな方法はありますか?(Python VS Java)

分類Dev

ノードjsストリームで*同じファイル*を読み書きするよりエレガントな方法はありますか?

分類Dev

部分文字列を作成するためのよりエレガントな方法はありますか?

分類Dev

ネストされた配列オブジェクトをフィルタリングする方法は?

分類Dev

JavaScriptで配列をフィルタリングしながらネストされた配列をフィルタリングする方法

分類Dev

data.frame内のインデックスのリストで並列フィルタリングするための効率的な方法はありますか?

分類Dev

ネストされた配列を別の文字列配列でフィルタリングするにはどうすればよいですか?

分類Dev

javaScriptはネストされたオブジェクトと配列をフィルタリングします

Related 関連記事

  1. 1

    配列内の配列のフィルタリング、これを行うためのエレガントな方法はありますか?

  2. 2

    Rでのネストされた操作。よりエレガントな方法はありますか?

  3. 3

    関数の失敗した結果をフィルタリングするよりエレガントな方法はありますか?

  4. 4

    ネストされたTask.WhenAllsと同等のエレガントな方法はありますか?

  5. 5

    C#で配列をネストするためのよりエレガントな方法はありますか?

  6. 6

    React Nativeでさまざまなコンポーネントを条件付きでレンダリングするためのより良いまたはよりエレガントな方法はありますか?

  7. 7

    このタイプの順列のためのよりエレガントな方法はありますか?

  8. 8

    いくつかの列の合計にネストされたランキングを適用するためのよりエレガントな方法

  9. 9

    スペースで区切られたテキスト値を整数として読み取り、配列にフロートするよりエレガントな方法はありますか?

  10. 10

    よりエレガントな方法はありますか?

  11. 11

    JavaScript配列のフィルタリングとマッピングにより、配列エントリの間にコンマが生成されますか?

  12. 12

    このビルダーをコーディングするためのよりエレガントな方法はありますか?

  13. 13

    MongoDBネストされた配列でフィルタリングする方法

  14. 14

    ネストされたSwiftyJSON配列をフィルタリングする方法

  15. 15

    ネストされた配列内にキーと値のペアを含まないエントリをフィルタリングするにはどうすればよいですか?

  16. 16

    xmlファイルをネストされた配列に解析する簡単な方法はありますか?

  17. 17

    SpringマネージドBeanをJavaカスタム/シンプルタグに挿入するエレガントな方法はありますか

  18. 18

    この「if」リストをよりエレガントな方法で書く方法はありますか?

  19. 19

    モデルがインスタンス化されるたびにプリティプリントのgemがトリガーされないようにする方法はありますか?

  20. 20

    特定のグループによる重複/繰り返しエントリを含まないフィルタリングする方法はありますか?

  21. 21

    GraphQLクエリフィールドをサブ/ネストされたクエリグループにグループ化する方法はありますか?

  22. 22

    Javaでリストを処理するよりエレガントな方法はありますか?(Python VS Java)

  23. 23

    ノードjsストリームで*同じファイル*を読み書きするよりエレガントな方法はありますか?

  24. 24

    部分文字列を作成するためのよりエレガントな方法はありますか?

  25. 25

    ネストされた配列オブジェクトをフィルタリングする方法は?

  26. 26

    JavaScriptで配列をフィルタリングしながらネストされた配列をフィルタリングする方法

  27. 27

    data.frame内のインデックスのリストで並列フィルタリングするための効率的な方法はありますか?

  28. 28

    ネストされた配列を別の文字列配列でフィルタリングするにはどうすればよいですか?

  29. 29

    javaScriptはネストされたオブジェクトと配列をフィルタリングします

ホットタグ

アーカイブ