簡體   English   中英

如何在Javascript / Lodash / ES6中同時搜索父對象和子對象?

[英]How to search both parent and child object in Javascript/Lodash/ES6?

所以我正在使用Vue篩選列表。 這由以下結構組成( Baum層次結構,如果有興趣的話):

 [
  {
    "id": 61,
    "created_at": "2016-11-23 22:07:10",
    "updated_at": "2016-12-15 19:44:56",
    "parent_id": null,
    "lft": 107,
    "rgt": 116,
    "depth": 0,
    "name": "Quia eos voluptas molestiae ut cum.",
    "slug": "consequatur-voluptatum-dolores-non-perferendis-possimus",
    "order_column": null,
    "belongs_to": null,
    "children": [
      {
        "id": 57,
        "created_at": "2016-11-23 22:07:10",
        "updated_at": "2016-12-15 19:44:56",
        "parent_id": 61,
        "lft": 110,
        "rgt": 113,
        "depth": 1,
        "name": "Molestias vitae velit doloribus.",
        "slug": "enim-itaque-autem-est-est-nisi",
        "order_column": null,
        "belongs_to": null,
        "children": []
    },{
        "name": "etc...",
    }

每個項目可以有不定數量的子項,這些子項也可以如此等等。 就我而言,我只有2個層次,所以1個父母可以有很多(或沒有)孩子,但是那些孩子不能有孩子。

我想搜索/過濾父名稱字段和子名稱字段。 如果在子級中找到,我想返回父級對象。

我可以使用Lodash過濾父對象:

            let search = this.search;
            return _.filter(this.sortable, function(item) {
                return item.name.search(new RegExp(search, "i")) !== -1;
            });

我該如何搜尋父母和孩子?

您可以使用遞歸功能

var res = _.reduce(this.sortable, function reducer(result, item) {
    if (item.name.search(new RegExp(search, "i")) !== -1) {
        result.items = _.concat(result.items, result.parent || item);
    }
    result.items = _.concat(
        result.items, 
       _.reduce(item.children, reducer, {parent: item, items: []}).items
    )
    return result;
}, {items: []}).items;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM