zoukankan      html  css  js  c++  java
  • JS复杂数据拆分重组

    var arr = [{id: 1},{id: 2},{id: 3},{id: 'blank'},{id: 4},{id: 5},{id: 'blank'}, {id: 6},{id: 'blank'}]
    
    1. 把 arr转换为二维数组:以blank分割,如下
    
    [ [{id: 1},{id: 2},{id: 3}], [ {id: 4},{id: 5} ], [{id: 6} ]]
    var arr = [{id: 0}, {id: 1, name: 'hr'}, {id: 2}, {id: 3}, {id: 4, name: 'hr'}, {id: 5}, {id: 6}]
    2. 把arr转换为:以name为hr拆分并追加到name为hr的chuidren,如下
    [{ id: 0 }, { id: 1, name: 'hr', children: [ {id: 2}, {id: 3} ] }, { id: 4, name: 'hr', children: [{id: 5}, {id: 6}] }]

    答案:

    1.
    var resetArr = arr.reduce((acc, cur, idx, src) => {
    //     console.log(acc)
        if(cur.id === 'blank') {
            idx!== src.length - 1 && acc.push([])
        } else {
            acc.length === 0 && acc.push([])
            acc[acc.length - 1].push(cur)
        }
        return acc
    }, [])
    2.
    function fn(list) {
        var newArr = []
        var n = 0;
        for (let i = 0; i < arr.length; i++) {
          const ele = arr[i];
          newArr.push(ele)
          n = i
          if (ele.name === 'hr') {
            n = i + 1
            console.log(arr[n], '---');
            ele.children = [];
            while (n < arr.length && (!arr[n].name)) {
              ele.children.push(arr[n])
              n = n + 1
            }
            i = n - 1;
          }
        }
        return newArr
    }
    var ss = fn(arr)
  • 相关阅读:
    CSP2019滚粗记
    [总结] wqs二分学习笔记
    [总结] 圆方树学习笔记
    [CF960G] Bandit Blues
    [总结] 第一类斯特林数
    [EOJ629] 两开花
    [CF286E] Ladies' shop
    [总结] 动态DP学习笔记
    [BZOJ3879] SvT
    [总结] 替罪羊树学习笔记
  • 原文地址:https://www.cnblogs.com/-walker/p/12416594.html
Copyright © 2011-2022 走看看