1.对象转树组
const obj = { 0: '男', 1:'女'}
function f(obj) {
// 创建一个新数组用来保存数据
let arr=[]
// 通过遍历把对象中的数据转到新创建的数组之中去
for (let key in obj) {
//在arr中添加一个对象,对象的中有两个键值对,label:当前项的值,value:当前项的key
arr.push({label:obj[key],value:key})
}
// 把新数组return出去这样就可以直接得到数据
return arr
}
const arr = f(obj) // arr ===> [{label: '男', value: 0},{label: '女', value: 1}]
console.log(arr);
2.数组转对象
const arr = [{label: '男', value: 0},{label: '女', value: 1}]
function f(arr) {
// 创建一个新对象用来存储数据
let m={}
// 遍历原数组
arr.forEach(item => {
// m对象的键:数组每一项的value值,值:每一项的label值
m[item.value]=item.label
});
// 把m对象return出去
return m
}
const obj = f(arr) // obj ===> {0: '男', 1:'女'}
console.log(obj);
3.数组转树
const data = [
{id:"01", name: "张大大", pid:"", job: "项目经理"},
{id:"02", name: "小亮", pid:"01", job: "产品leader"},
{id:"03", name: "小美", pid:"01", job: "UIleader"},
{id:"04", name: "老马", pid:"01", job: "技术leader"},
{id:"05", name: "老王", pid:"01", job: "测试leader"},
{id:"06", name: "老李", pid:"01", job: "运维leader"},
{id:"07", name: "小丽", pid:"02", job: "产品经理"},
{id:"08", name: "大光", pid:"02", job: "产品经理"},
{id:"09", name: "小高", pid:"03", job: "UI设计师"},
{id:"10", name: "小刘", pid:"04", job: "前端工程师"},
{id:"11", name: "小华", pid:"04", job: "后端工程师"},
{id:"12", name: "小李", pid:"04", job: "后端工程师"},
{id:"13", name: "小赵", pid:"05", job: "测试工程师"},
{id:"14", name: "小强", pid:"05", job: "测试工程师"},
{id:"15", name: "小涛", pid:"06", job: "运维工程师"}
]
function h(data) {
// 空数组
let result = [];
// 判断不是数组 直接返回
if (!Array.isArray(data)) {
return result
}
// 遍历原数组把每一项的children删除掉,因为后面需要增加
data.forEach(item => {
delete item.children;
});
// 空对象
let map = {};
// 遍历原数组,map对象的 键: 是每一项的id 值:每一项
data.forEach(item =>map[item.id] = item)
data.forEach(item => {
// item.pid 为0时 返回underfined
let parent = map[item.pid];
if (parent) {
(parent.children || (parent.children = [])).push(item);
} else {
// 这里push的item是pid为0的数据
result.push(item);
}
});
return result;
}
console.log(h(data))