javaScript展开对象(对象扁平化)

3,208 阅读1分钟

题目

/* 题目*/
var entryObj = {
	a: {
		b: {
			c: {
				dd: 'abcdd'
			}
		},
		d: {
			xx: 'adxx'
		},
		e: 'ae'
	}
}

// 要求转换成如下对象
var outputObj = {
	'a.b.c.dd': 'abcdd',
	'a.d.xx': 'adxx',
	'a.e': 'ae'
}

答案:

这里采用递归较为方便

var entryObj = {
	a: {
		b: {
			c: {
				dd: 'abcdd'
			}
		},
		d: {
			xx: 'adxx'
		},
		e: 'ae'
	}
}

function transform(entryObj) {
	let outputObj = {} //输出对象
	fn(entryObj)
	return outputObj

	function fn(obj, temp_key = '') { //temp_key--临时存放属性名
		for (let key in obj) {
			if (typeof obj[key] == 'object') {
				fn(obj[key], temp_key + key + '.')
			} else {
				outputObj[temp_key + key] = obj[key]
			}
		}
	}
}
console.log(transform(entryObj)) //打印测试

题目来源:github.com/Advanced-Fr…

如果还有较为好的解决方案,欢迎留言。。。