Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
164 views
in Technique[技术] by (71.8m points)

js过滤对象数组

const arr1 = [
    {
        name: 'manage',
        meta: {ums:'MANAGE_ROOT'},
        children:[
            {
                name: 'manage_list',
                meta: {ums:'MANAGE_LIST'},
            },
            {
                name: 'manage_add',
                meta: {ums:'MANAGE_ADD'},
            },
            {
                name: 'manage_edit',
                meta: {ums:'MANAGE_EDIT'},
            }
        ]
    },
    {
        name: 'good',
        meta: {ums:'GOOD_ROOT'},
        children:[
            {
                name: 'good_list',
                meta: {ums:'GOOD_LIST'},
            },
            {
                name: 'good_add',
                meta: {ums:'GOOD_ADD'},
            },
            {
                name: 'good_edit',
                meta: {ums:'GOOD_EDIT'},
            }
        ]
    }
]
var arr2 = [‘MANAGE_ROOT’,‘MANAGE_LIST’,‘GOOD_ROOT’,‘GOOD_LIST’,‘GOOD_ADD’]

通过arr2筛选arr1,只保留arr1中ums属性在arr2中存在的


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
// 复杂度O(m*n)
function filter(list, meta) {
  return list.filter(item => {
    if(meta.includes(item.meta.ums)) {
      if(item.children) item.children = filter(item.children, meta);
      return true;
    }
    return false;
  })
}

// 复杂度O(n),空间复杂度O(m)
function filter2(list, meta) {
    return list.filter(item => {
    if(meta.has(item.meta.ums)) {
      if(item.children) item.children = filter2(item.children, meta);
      return true;
    }
    return false;
  })
}

filter(arr1, arr2)
filter2(arr1, new Set(arr2))

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...