鍍金池/ 問(wèn)答/網(wǎng)絡(luò)安全  HTML/ 數(shù)組中如何按照規(guī)則篩選對(duì)象?

數(shù)組中如何按照規(guī)則篩選對(duì)象?

const router = [
    {
        path: '/hello',
        icon: 'hammer',
        name: 'hello',
        title: '你好',
        children: [
            { path: 'index', title: '你好', name: 'hello_index' },
            { path: 'index1', title: '你好1', name: 'hello_index1' }
        ]
    },
    {
        path: '/hello1',
        icon: 'hammer',
        name: 'hello1',
        title: '你好',
        children: [
            { path: 'index2', title: '你好2', name: 'hello_index2' },
            { path: 'index3', title: '你好3', name: 'hello_index3' },
            { path: 'index4', title: '你好3', name: 'hello_index4' }
        ]
    },
    {
        path: '/hello2',
        icon: 'hammer',
        name: 'hello2',
        title: '你好',
        children: [
            { path: 'index4', title: '你好4', name: 'hello_index4' },
            { path: 'index5', title: '你好5', name: 'hello_index5' }
        ]
    }
]
let routernone = [
    {
        path: '/hello2',
        children: []
    },
    {
        path: '/hello1',
        children: [
            'index2', 'index3'
        ]
    }
];
請(qǐng)問(wèn)如何在 router 以 routernone 為規(guī)則 篩選出新數(shù)組,routernone中表明,不取path為'/hello2'的,不取path為'/hello1'的children中 path為index2的和path為index3的,
回答
編輯回答
愛(ài)礙唉

為什么要多加一個(gè)用于篩選的呢,直接在第一個(gè)對(duì)象列表中加標(biāo)志不就好了,

const router = [
    {
        path: '/hello',
        icon: 'hammer',
        name: 'hello',
        title: '你好',
        children: [
            { path: 'index', title: '你好', name: 'hello_index' },
            { path: 'index1', title: '你好1', name: 'hello_index1' }
        ]
    },
    {
        path: '/hello1',
        icon: 'hammer',
        name: 'hello1',
        title: '你好',
        children: [
            { path: 'index2', title: '你好2', name: 'hello_index2',meta: {noshow:true} },
            { path: 'index3', title: '你好3', name: 'hello_index3' ,meta: {noshow:true}},
            { path: 'index4', title: '你好3', name: 'hello_index4' }
        ]
    },
    {
        path: '/hello2',
        icon: 'hammer',
        name: 'hello2',
        title: '你好',
        meta: {noshow:true},
        children: [
            { path: 'index4', title: '你好4', name: 'hello_index4' },
            { path: 'index5', title: '你好5', name: 'hello_index5' }
        ]
    }
]

在運(yùn)行時(shí)判斷一下meta里的noshow是true,就不顯示不就好了

2018年6月12日 23:25
編輯回答
詆毀你

暴力篩選,能做的只是優(yōu)化暴力程度;

let router = [
    {
        path: '/hello',
        icon: 'hammer',
        name: 'hello',
        title: '你好',
        children: [
            { path: 'index', title: '你好', name: 'hello_index' },
            { path: 'index1', title: '你好1', name: 'hello_index1' }
        ]
    },
    {
        path: '/hello1',
        icon: 'hammer',
        name: 'hello1',
        title: '你好',
        children: [
            { path: 'index2', title: '你好2', name: 'hello_index2' },
            { path: 'index3', title: '你好3', name: 'hello_index3' },
            { path: 'index4', title: '你好3', name: 'hello_index4' }
        ]
    },
    {
        path: '/hello2',
        icon: 'hammer',
        name: 'hello2',
        title: '你好',
        children: [
            { path: 'index4', title: '你好4', name: 'hello_index4' },
            { path: 'index5', title: '你好5', name: 'hello_index5' }
        ]
    }
]
let routernone = {
    '/hello2': [],
    '/hello1': ['index2', 'index3']
}


router = router.filter((route, index) => {
     if (routernone[route.path]){
        if (routernone[route.path].length > 0) {
            route.children = route.children.filter((child)=> {
                return routernone[route.path].indexOf(child.path) <= -1
            })
            
            return true
        } else {
            return false
        }
    } else {
        return true
    }
})


console.log(router)
2018年7月9日 00:43
編輯回答
溫衫
let router = [
    {
        path: '/hello',
        icon: 'hammer',
        name: 'hello',
        title: '你好',
        children: [
            { path: 'index', title: '你好', name: 'hello_index' },
            { path: 'index1', title: '你好1', name: 'hello_index1' }
        ]
    },
    {
        path: '/hello1',
        icon: 'hammer',
        name: 'hello1',
        title: '你好',
        children: [
            { path: 'index2', title: '你好2', name: 'hello_index2' },
            { path: 'index3', title: '你好3', name: 'hello_index3' },
            { path: 'index4', title: '你好3', name: 'hello_index4' }
        ]
    },
    {
        path: '/hello2',
        icon: 'hammer',
        name: 'hello2',
        title: '你好',
        children: [
            { path: 'index4', title: '你好4', name: 'hello_index4' },
            { path: 'index5', title: '你好5', name: 'hello_index5' }
        ]
    }
];
let routernone = [
    { path: '/hello2'}
];
let routernone2 = [
     {
        path: '/hello1',
        children: [
            'index2', 'index3'
        ]
    }
];
router = router.filter(item => {
    return routernone.findIndex( i => item.path == i.path) == -1;
}).map(item => {
    
    let temp = routernone2.find(i => i.path == item.path);
    if(temp){
        item.children = item.children.filter(ii => !temp.children.find(iii => iii == ii.path));
    } 
    return item;
});
2017年9月28日 09:37