javaScript实现多维数组反查--通过子元素的某个属性反查到最上面的父元素

807 阅读1分钟
[{
	"areaId": 1,
	"name": "电化厂",
	"parentId": 0,
	"children": [{
		"areaId": 3,
		"name": "甲烷",
		"parentId": 1,
		"children": [{
			"areaId": 4,
			"name": "甲烷厂",
			"parentId": 3,
			"dtoId": 4
		}, {
			"areaId": 17,
			"name": "烷卤化物",
			"parentId": 3,
			"dtoId": 17
		}, {
			"areaId": 18,
			"name": "护物",
			"parentId": 3,
			"dtoId": 18
		}],
		"dtoId": 3
	}, {
		"areaId": 22,
		"name": "酸",
		"parentId": 1,
		"children": [{
			"areaId": 23,
			"name": "化碳",
			"parentId": 22,
			"dtoId": 23
		}],
		"dtoId": 22
	}],
	"dtoId": 1
}, {
	"areaId": 2,
	"name": "氟工",
	"parentId": 0,
	"children": [{
		"areaId": 19,
		"name": "钠",
		"parentId": 2,
		"children": [{
			"areaId": 20,
			"name": "高钾",
			"parentId": 19,
			"dtoId": 20
		}, {
			"areaId": 21,
			"name": "钠",
			"parentId": 19,
			"dtoId": 21
		}],
		"dtoId": 19
	}],
	"dtoId": 2
}]

拍平数组

 function fn(arr) {
    let array = [];
    arr.forEach((val) => {
        if (val.children instanceof Array) {
            let temp = {};
            temp.areaId = val.areaId;
            temp.name = val.name;
            temp.parentId = val.parentId;
            temp.dtoId = val.dtoId;
            array.push(temp);
            array = array.concat(this.fn(val.children))
        } else {
            array.push(val)
        }
    });
    return array
}

递归获取

function getParent(arr,id){
    arr.forEach(v => {
        if(v.areaId === id){
            if(v.parentId !== 0){
                this.area.push(v.parentId);
                this.getParent(arr,v.parentId);
            }
        }
    });
},