js数据处理一维数组对象转换为二维数组对象

//我这里用的hooks写法
  const [groupList, setGroupList] = useState([{ name: '', children: [] }])
Ï
	
//Ï当前数据结构
  const obj = [
    { name: '花花', value: '1', key: '1',group:'明星' },
    { name: '姚晨', value: '2', key: '2',group:'明星' },
    { name: '小绿', value: '3', key: '3',group:'草根' },
    { name: '小红', value: '4', key: '4',group:'草根' }
  ];
//处理后的数据结构
  const newObj = [
    {
      group: '明星', children: [
        { name: '花花', value: '1', key: '1', group: '明星' },
        { name: '姚晨', value: '2', key: '2', group: '明星' },
      ]
    }, {
      group: '草根', children: [
        { name: '小绿', value: '3', key: '3', group: '草根' },
        { name: '小红', value: '4', key: '4', group: '草根' }
      ]
    }
  ]
  const trans = (arr) => {
    let map = {};
    let newArr = [...arr]
    while (newArr.length) {
      let current = newArr.pop()
      map[curren.group] = map[curren.group] || []
      map[curren.group].unshift(current)
      //这里拿到的第一层对象是正序的,push为倒叙
    }  
    // 这里处理后有个弊端就是对象的key值为中文,不晓得会不会影响
	console.log(map)
    return Object.keys(map).map(key => map[key]) 
  }
  
  useEffect(() => {
    setGroupList(() => {
      let obj = { name: '', children: [] }
      let arr = []
      trans(fields).map((item, index) => {
        obj['name'] = item[0].group;
        obj.children = item
        arr.push({ ...obj })
      })
      return arr.reverse()
    })

  }, [obj]) // 因为这里一般情况都是从接口传递过来的,如果不是不写

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值