簡體   English   中英

如何過濾這樣的嵌套數組?

[英]how to filter nested array like this?

我有如下回應

 let m =  [
      {
        name: 'Summary',
        subListExpanded: false,
        subList: [
        ]
      },
      {
        name: 'Upload',
        subListExpanded: false,
        subList: [
        ]
      },
      {
        name: 'Tasks',
        subListExpanded: false,
        subList: [
        ]
      },
      {
        name: 'Dashboard',
        subListExpanded: false,
        subList: [
        ]
      },
      {
        name: 'Master',
        subListExpanded: false,
        subList: [
          {
            id: 'user-master',
            name: 'User-Master'
          },
          {
            id: 'menu-master',
            name: 'Menu-Master'
          },
          {
            id: 'entity-master',
            name: 'Entity-Master'
          },
          {
            id: 'vendor-master',
            name: 'Vendor-Master'
          },
          {
            id: 'xxx-master',
            name: 'xxx-Master'
          }
        ]
      }
    ];

如果我搜索m過濾器應該是這樣的

 [
  {
    name: 'Summary',
    subListExpanded: false,
    subList: [
    ]
  },
  {
    name: 'Master',
    subListExpanded: false,
    subList: [
      {
        id: 'user-master',
        name: 'User-Master'
      },
      {
        id: 'menu-master',
        name: 'Menu-Master'
      },
      {
        id: 'entity-master',
        name: 'Entity-Master'
      },
      {
        id: 'vendor-master',
        name: 'Vendor-Master'
      },
      {
        id: 'xxx-master',
        name: 'xxx-Master'
      }
    ]
  }
];

如果我搜索master ,過濾器響應應該是這樣的?

[
      {
        name: 'Master',
        subListExpanded: false,
        subList: [
          {
            id: 'user-master',
            name: 'User-Master'
          },
          {
            id: 'menu-master',
            name: 'Menu-Master'
          },
          {
            id: 'entity-master',
            name: 'Entity-Master'
          },
          {
            id: 'vendor-master',
            name: 'Vendor-Master'
          },
          {
            id: 'xxx-master',
            name: 'xxx-Master'
          }
        ]
      }
    ];

如果我搜索xxx-master則過濾器響應應為

[
{
        name: 'Master',
        subListExpanded: false,
        subList: [
          {
            id: 'xxx-master',
            name: 'xxx-Master'
          }
        ]
      }
    ];

如果我搜索slkvcsmcskc過濾器響應如

 []

我的打字稿代碼無法正常工作。請幫助我解決此問題>

  m.filter(x=> x.name.toLowerCase() === search.toLowerCase() || x.subList.some(x1=> x1.name.toLowerCase()===search.toLowerCase()))

以下代碼給出了所需的輸出。 請注意,我添加了一些復雜性,您的用例可能不需要。 但是,該示例應適用於具有任意深度嵌套的列表(請參見“ bar”示例)。

 let m = [ { name: 'Summary', subListExpanded: false, subList: [ ] }, { name: 'Upload', subListExpanded: false, subList: [ { name: 'foo', subList: [ { name: 'bar', } ], } ] }, { name: 'Tasks', subListExpanded: false, subList: [ ] }, { name: 'Dashboard', subListExpanded: false, subList: [ ] }, { name: 'Master', subListExpanded: false, subList: [ { id: 'user-master', name: 'User-Master' }, { id: 'menu-master', name: 'Menu-Master' }, { id: 'entity-master', name: 'Entity-Master' }, { id: 'vendor-master', name: 'Vendor-Master' }, { id: 'xxx-master', name: 'xxx-Master' } ] } ]; function search (input, query) { const queryReg = new RegExp(query, 'i'); function searchInternal (data) { let result = []; data.forEach(item => { const parentMatch = queryReg.test(item.name); let subMatch = false; if (item.subList) { let subResult = searchInternal(item.subList); subMatch = subResult.length > 0; item.subList = subMatch ? subResult : []; } // push parent if it matches for itself or a child (list) matches if (parentMatch || subMatch) result.push(item); }); return result; } return searchInternal(JSON.parse(JSON.stringify(input)) /* create a working copy with JSON.parse(...) */); } console.log('master', search(m, 'master')); console.log('xxx-master', search(m, 'xxx-master')); console.log('m', search(m, 'm')); console.log('bar', search(m, 'bar')); console.log('slkvcsmcskc', search(m, 'slkvcsmcskc')); 

實際上,它應該像這樣:

obj = {
    _id: "sjkd9skj",
    data: {
      dektop: [
                { 
                   x: 2,
                   y: 3,
                   t: { key: 'aabbcc'}
                }, 
                ... 
              ],
      mobile: [
                { 
                   x: 4,
                   y: 3,
                   t: { key: 'ffff'}
                }, 
                ... 
              ],
      print: [
                { 
                   x: 7,
                   y: 5,
                   t: { key: 'ppp'}
                }, 
                ... 
              ]
    }
}

暫無
暫無

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

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