一个面试题,使用 js 递归 实现 walk 函数,将树结构的数据转化为列表数据

2020-10-14 18:41发布

问题:

一个面试题,使用 js 递归
实现 walk 函数,将树结构的数据转化为列表数据

/**
input: [{
	id: 1,
	text: 'text1',
	children: [{
		id: 2,
		text: 'text2',
		parentId: 1,
		children: [{
			id: 4,
			text: 'text4',
			parentId: 2
		}]
	}, {
		id: 3,
		text: 'text3',
		parentId: 1
	}]
}]
output: [{
	id: 4,
	text: 'text4',
	parentId: 2
}, {
	id: 2,
	text: 'text2',
	parentId: 1
}, {
	id: 3,
	text: 'text3',
	parentId: 1
}, {
	id: 1,
	text: 'text1'
}, ];
**/
function walk(list) {
// code here
}

回答1:

var input = [{
    id: 1,
    text: 'text1',
    children: [{
        id: 2,
        text: 'text2',
        parentId: 1,
        children: [{
            id: 4,
            text: 'text4',
            parentId: 2
        }]
    }, {
        id: 3,
        text: 'text3',
        parentId: 1
    }]
}];

var output = [];
(function walk(list) {
    list.forEach(function (item) {
        if (item.children) {
            walk(item.children);
            delete item.children;
        }
        output.push(item);
    })
}(input));
console.log(output);