<select id="select"></select>
<h4>最终效果</h4>
<select>
<option value="4" label="a/a-2/index"></option>
<option value="6" label="a/a-3/index"></option>
<option value="8" label="b/index"></option>
<option value="9" label="c"></option>
</select>
xxxxxxxxxx
select{
font-size: 16px;
width: 200px;
height: 36px;
padding: 0 10px;
}
xxxxxxxxxx
const _list = [{
name: 'a',
flag: 'directory',
id: '1',
parentId: 'head',
child: [{
name: 'a-1',
flag: 'directory',
id: '2',
parentId: '1'
}, {
name: 'a-2',
flag: 'directory',
id: '3',
parentId: '1',
child: [{
name: 'index',
flag: 'page',
id: '4',
parentId: '3'
}]
}, {
name: 'a-3',
flag: 'directory',
id: '5',
parentId: '1',
child: [{
name: 'index',
flag: 'page',
id: '6',
parentId: '5'
}]
}]
}, {
name: 'b',
flag: 'directory',
id: '7',
parentId: 'head',
child: [{
name: 'index',
flag: 'page',
id: '8',
parentId: '7'
}]
}, {
name: 'c',
flag: 'page',
id: '9',
parentId: 'head'
}]
let newList = []
const fn = (arr, path = '') => {
arr.forEach(item => {
if (item.flag === 'page') {
newList.push({
id: item.id,
name: `${path}/${item.name}`
})
}
item.child && item.child.length && fn(item.child, `${path}/${item.name}`)
})
}
fn(_list)
const range = document.createRange();
newList.forEach(item => {
document.getElementById('select').append(range.createContextualFragment(`<option value="${item.id}" label="${item.name}"></option>`))
})