递归(recursion) -- 实现功能(转换类型 / 添加新属性)

let treeData = [{
     
	id: 1,
	aname: '邓稼先',
	value: '核物理学家',
	age: 1924,
	children: [{
     
		id: 11,
		aname: '袁隆平',
		value: '杂交水稻育种专家',
		age: 1930,
		children: []
	}]
}, 	
{
     
	id: 2,
	aname: '钱学森',
	value: '空气动力学家',
	age: 1991,
	children: [{
     
		id: 22,
		aname: '李四光',
		value: '地质学家',
		age: 1889,
		children: [{
     
			id: 222,
			aname: '于敏',
			value: '核物理学家',
			age: 1926,
			children: []
		}]
	}]
}, 
{
     
	id: 3,
	aname: '华罗庚',
	value: '数学家',
	age: 1910,
	children: [{
     
		id: 33,
		aname: '钱三强',
		value: '核物理学家',
		age: 1913,
		children: []
	}]
}];

function tree(data) {
     
	for (let key in data) {
     
		if (key == "age") {
     
			// 把数字类型转为字符串
			data[key] = data[key].toString();

			// 添加新属性
			data['scientist'] = data['aname'] + '是' + data['value'] + '。';
			data['introduce'] = `${
       data['aname']}出生于 ${
       data[key]} 年。`;
		
			// 注意
			// 如果把 添加新属性 放到判断外面会出问题
			// 因为无法把修改后的值赋值到对应位置
			// 而且数据外层还多出新增的属性
		};

		if (typeof data[key] == "object") {
     
		    // 递归调用
		    // 注意:递归需要设置跳出
		    // 否则会一直递归造成内存溢出
			tree(data[key]);
		};

		if(data[key].id == 1) {
     
			console.log(data[key]);
			// {id: 1, aname: "邓稼先", value: "核物理学家", age: "1924", children: Array(1), …}
		};
	};
	return data;
};
console.log(tree(treeData)); // 输出结果

递归(recursion) -- 实现功能(转换类型 / 添加新属性)_第1张图片

你可能感兴趣的:(JavaScript,JavaScript,功能模块,javascript)