第一题:
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);