本文主要是介绍JavaScript 对象扁平化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
<script>
const obj = {
a: {
b: 1,
c: 2,
d: { e: 5 },
},
b: [1, 3, { a: 2, b: 3 }],
c: 3
}
/*
{
'a.b': 1,
'a.c': 2,
'a.d.e': 5,
'b[0]': 1,
'b[1]': 3,
'b[2].a': 2,
'b[2].b': 3
c: 3
}
*/
function flatObj(o) {
if (typeof o !== 'object') throw new Error(`TypeError: need a object type but get a ${typeof o}`)
const res = {}
const flat = (obj, preKey = '') => {
Object.entries(obj).forEach(([key, value]) => {
/*
handle key
preKey默认是''
如果是递归入口 preKey有值 需要加 . 或者 [] 分割
*/
let newKey = key
if (preKey) {
newKey = `${preKey}${Array.isArray(obj) ? `[${newKey}]` : `.${newKey}`}`
}
/*
handle value
引用类型继续递归拍平
基本类型设置到结果对象上
*/
if (value && typeof value === 'object') {
return flat(value, newKey)
}
res[newKey] = key
})
}
flat(o)
return res
}
console.log(flatObj(obj))
</script>
这篇关于JavaScript 对象扁平化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!