Skip to content

一 对象扁平化

JS
/* 题⽬*/
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'
}
JS
let flatten = (myObj) => {
  debugger
  const flatObj = {}
  let flag = null

  function formatKey(obj, keyName) {
    for (let key in obj) {
      if (typeof obj[key] === 'object' && obj[key] !== null) {
        if (!keyName) {
          formatKey(obj[key], key)
        } else {
          if (Array.isArray(obj)) {
            formatKey(obj[key], `${keyName}[${key}]`)
          } else {
            formatKey(obj[key], `${keyName}.${key}`)
          }
        }
      } else {
        //值不是对象 或者是 null
        if (!keyName) {
          flatObj[key] = obj[key]
        } else {
          if (Array.isArray(obj)) {
            flatObj[`${keyName}[${key}]`] = obj[key]
          } else {
            flatObj[`${keyName}.${key}`] = obj[key]
          }
        }
      }
    }
  }
  formatKey(myObj, flag)
  return flatObj
}

let result = flatten(entryObj)
console.log('🚀 ~~- result:', result)