87,996
社区成员
发帖
与我相关
我的任务
分享
//模拟数据1
,data1 = [{
title: '江西'
,id: 1
,children: [{
title: '南昌'
,id: 1000
,children: [{
title: '青山湖区'
,id: 10001
},{
title: '高新区'
,id: 10002
}]
},{
title: '九江'
,id: 1001
},{
title: '赣州'
,id: 1002
}]
},{
title: '广西'
,id: 2
,children: [{
title: '南宁'
,id: 2000
},{
title: '桂林'
,id: 2001
}]
},{
title: '陕西'
,id: 3
,children: [{
title: '西安'
,id: 3000
},{
title: '延安'
,id: 3001
}]
}]
const newItem = {
id: item.id,
title: item.title,
children:!!item.children //把真值转换成了布尔值
};
类型声明去掉,加个默认值,用function代替箭头函数就行了……
保留children数据
function transform2Json(data, json) {
json = json || {};
data.forEach(function(item) {
let newItem = {
id: item.id,
title: item.title
};
item.children && (newItem.children = item.children);
json[item.id] = newItem;
item.children && transform2Json(item.children, json);
});
return json;
};
const json = transform2Json(data);
//打印
console.log(json);
//判断id=1时是否存在children
console.log('id=1 =>', !!json[1].children);
//判断id=10001时是否存在children
console.log('id=10001 =>', !!json[10001].children);
不保留children数据,转换为布尔类型
function transform2Json(data, json) {
json = json || {};
data.forEach(function(item) {
let newItem = {
id: item.id,
title: item.title,
children:!!item.children
};
json[item.id] = newItem;
item.children && transform2Json(item.children, json);
});
return json;
};
const json = transform2Json(data);
//打印
console.log(json);
//判断id=1时是否存在children
console.log('id=1 =>', json[1].children);
//判断id=10001时是否存在children
console.log('id=10001 =>', json[10001].children);
/**
* 将源数组形态进行改变,拉平层级,并以id做为单项数据的属性名称以便于直接查找
* @param data {any[]} 待遍历数组:初始时源数组,内部查找时为对应的children节点数据
* @param json {Record<number,any>} 待返回的新数据对象,默认值为{};它由源数组变化而来,数据结构如下:
* @example
* {
* 1:{fid:0,id:1,title:"xx",children:[]||false},
* 1000:{fid:1,id:1000,title:"xxxx",children:[]||false}
* }
*/
function transform2Json(data: any[], json: Record<number, any> = {}) {
data.forEach(item => {
let newItem: {id: number, title: string, children?: any[]} = {
id: item.id,
title: item.title
};
item.children && (newItem.children = item.children);
json[item.id] = newItem;
item.children && transform2Json(item.children, json);
});
return json;
}
const json = transform2Json(data);
//打印
console.log(json);
//判断id=1时是否存在children
console.log('id=1 =>',!!json[1].children);
//判断id=10001时是否存在children
console.log('id=10001 =>',!!json[10001].children);
其中为了后续可以直接获取children,所以children部分的数据是有冗余的。如果只是需要做个简单判断,不需要保留到后续使用,可将
let newItem: {id: number, title: string, children?: any[]} = {
id: item.id,
title: item.title
};
item.children && (newItem.children = item.children);
改为:
const newItem = {
id: item.id,
title: item.title,
children:!!item.children
};