第一题:
    const treeData = [
    {
    id: 1,
    name: ‘xx’,
    children:[
    {
    id: 11,
    name: ‘1xx’,
    children: [
    {
    id: 111,
    name: ‘11xx’
    }
    ]
    },
    {
    id: 12,
    name: ‘12x’
    }
    ]
    }
    ]

    // 转换后的目标数组
    const newObj = {
    1: {
    name: ‘xx’,
    children: [11,22]
    },
    11: {
    name: ‘1xx’,
    children: [111],
    parent: 1
    },
    12: {
    name: ‘1xx’,
    parent: 1
    },
    111: {
    name: ‘11xx’,
    parent: 11
    }
    // …
    }

    解:
    方法一:
    // 存放最终值
    let result = {}
    function newTreeData(item, parent) {
    for (let i = 0; i < item.length; i++) {

    let obj = { name: item[i].name }
    console.log(‘obj’, obj)
    let arr = []
    //parent 有没有父id
    if (parent) obj.parent = parent
    if (item[i].children) {
    for (let j = 0; j < item[i].children?.length; j++) {
    arr.push(item[i].children[j].id)
    obj.children = arr
    }
    newTreeData(item[i].children, item[i].id)
    }
    result[item[i].id] = obj
    }
    return result
    }
    console.log(newTreeData(treeData))

    方法二:
    const dataToMap = (tree = [], parentId) => {
    let flatTree = {}
    tree.forEach(ele => {
    const { id, name, children } = ele
    flatTree[id] = { name }
    // 查找同级子元素id
    if (children && children.length) {
    flatTree[id].children = children.map(item => item.id)
    }
    // 查找父级元素
    if (parentId) {
    flatTree[id].parentId = parentId
    }
    // 遍历出所有元素
    if (children && children.length) {
    const obj = dataToMap(children, id)
    flatTree = {…flatTree, …obj}
    }
    })
    return flatTree
    }

    第二题:
    把arrlist转成:
    newArrlist = [{per: ‘9月1’, duy: true ,rowspan: 1}, { per: ‘9月2’, duy: true, rowspan: 2}, { per: ‘9月2’, duy: true,}, { per: ‘9月3’, duy: false, rowspan: 1}, {per:’9月4’, duy:true, rowSpan: 4} ]
    let arrlist =
    { per: ‘9月1’, duy: false,},
    { per: ‘9月1’, duy: false,},
    { per: ‘9月1’, duy: true,},
    { per: ‘9月1’, duy: false,},
    { per: ‘9月2’, duy: false,},
    { per: ‘9月2’, duy: true,},
    { per: ‘9月2’, duy: true,},
    { per: ‘9月2’, duy: false,},
    { per: ‘9月3’, duy: false,},
    { per: ‘9月3’, duy: false,},
    { per: ‘9月3’, duy: false,},
    { per: ‘9月3’, duy: false,},
    { per: ‘9月4’, duy: true,},
    { per: ‘9月4’, duy: true,},
    { per: ‘9月4’, duy: true,},
    { per: ‘9月4’, duy: true,},
    ];
    let len = arrlist.length;
    let result = [];
    let sliceNum = 4;
    for (let i = 0; i < len / sliceNum; i++) {
    result.push(arrlist.slice(i sliceNum, ( i + 1) sliceNum))
    }
    console.log(‘111-11’, result ); // 这里会生成一数组,4个项 result = [ [
    { per: ‘9月1’, duy: false,},
    { per: ‘9月1’, duy: false,},
    { per: ‘9月1’, duy: true,},
    { per: ‘9月1’, duy: false,},] ,
    [
    { per: ‘9月2’, duy: false,},
    { per: ‘9月2’, duy: true,},
    { per: ‘9月2’, duy: true,},
    { per: ‘9月2’, duy: false,},
    ] ,
    [
    { per: ‘9月3’, duy: false,},
    { per: ‘9月3’, duy: false,},
    { per: ‘9月3’, duy: false,},
    { per: ‘9月3’, duy: false,},
    ],
    [
    { per: ‘9月4’, duy: true,},
    { per: ‘9月4’, duy: true,},
    { per: ‘9月4’, duy: true,},
    { per: ‘9月4’, duy: true,},
    ]]
    //遍历 result
    var twoArr = result.map(arr => {
    //把result中的4个数组 中每一个数组里面的 duy为 true的拿出来 放在 tempArr中
    var tempArr = arr.filter(item => item.duy);
    // tempArr.length === 0 这个为0 的意思是每4个和为一组的数组中, 没有字段duy为ture的项,所有这里默认取第一个数组
    // [arr[0]] 每一项的第一个数组
    var newTempArr = tempArr.length === 0 ? [arr[0]] : tempArr;
    //给第一项 加个rowspan字段 然后把 newTempArr的长度赋值给这个字段, 这个长度就是 4个数组中 每一个数组中 字段duy为true的个数
    newTempArr[0][‘rowSpan’] = newTempArr.length;
    return newTempArr
    })
    console.log(‘33-33’, twoArr);
    //这一步是为了 把多维数组转换成一维数组 类似:
    [ [ { XX: XX}, {XX:XX} ], [ { } ,{ } , { }], [ { } , { }, { }] ]
    转成了 [ {}, {}, {},{},{},{}…]这种
    var resulArr = [];
    twoArr.forEach(item => {
    resulArr.push(…item)
    })
    console.log(‘5550555’, resulArr);