function treeObj(originObj){
//对象深拷贝
let obj ={};
for (let key in originObj){
var val = originObj[key];
obj[key] = typeof val === 'object' ? arguments.callee(val):val;
}
//对象新增children键值,用于存放子树
obj['children'] = [];
return obj;
}
//data:带转换成树形结构的对象数组
//attributes:对象属性
function toTreeData (data, attributes) {
let resData = data;
let tree = [];
//找寻根节点
for (let i = 0; i < resData.length; i++) {
if (resData[i][attributes.parentId] === ''|| resData[i][attributes.parentId] === null) {
tree.push( treeObj(resData[i]) );
resData.splice(i, 1);
i--;
}
}
run(tree);
//找寻子树
function run(chiArr) {
if (resData.length !== 0) {
for (let i = 0; i < chiArr.length; i++) {
for (let j = 0; j < resData.length; j++) {
if (chiArr[i][attributes.id] === resData[j][attributes.parentId]){
let obj = treeObj(resData[j]);
chiArr[i].children.push(obj);
resData.splice(j, 1);
j--;
}
}
run(chiArr[i].children);
}
}
}
return tree;
}
//!!!最终方法
//list基础数组,sonId子级属性名,parentId父级属性名,
export function getParentList(list,sonId,parentId) {
let data = list;
// 属性配置信息
let attributes = {
id: sonId,
parentId: parentId,
};
let treeData = toTreeData(data, attributes);
return treeData;
}
js 将一个数组按指定的id和parentId 变形成父子级数组集合
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 题目描述:把一个数组arr按照指定的数组大小size分割成若干个数组块。例如:chunk([1,2,3,4],2)...
- 例如: 现在想把arr2 的第1个对象插到arr1的第1个对象后,arr2 的第2个对象插到arr1的第2个对象后...
- 1,数组里面包含对象 var lookMachineList= [ { add_id:151 add_name:"...