将同一级过滤到两级的数据
2018-07-30 本文已影响3人
Lia代码猪崽
原来的数据格式为:
const tree = [
{
id: '111111',
name: 'parent1',
parentId: null
},
{
id: '222222',
name: 'parent2',
parentId: null
},
{
id: '333333',
name: 'children1',
parentId: '111111'
}
]
定义一个过滤函数:
function filter(arr) {
const parents = arr.filter(item => item.parentId === null)
const newArray = parents.map((item, index) => Object.assign(item, {
children: arr.filter(s => s.parentId === item.id)
}))
return newArray
}
让我们来分析过滤函数里:
// parent 应该为:
[
{
id: '111111',
name: 'parent1',
parentId: null
},
{
id: '222222',
name: 'parent2',
parentId: null
}
]
Object.assign的作用是去把parentId加入到id相等的父元素的children属性里,否则应为空数组。
map则为遍历这个数组,每一个元素都会运行这个方法。
所以结果为:
console.log(filter(tree))
//
[
{
id: '111111',
name: 'parent1',
parentId: null,
children: [
{
id: '222222',
name: 'parent2',
parentId: null
}
]
},
{
id: '222222',
name: 'parent2',
parentId: null,
children: []
}
]