将同一级过滤到两级的数据

原来的数据格式为:

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: []
  }
]

你可能感兴趣的:(将同一级过滤到两级的数据)