Skip to content

Latest commit

 

History

History
42 lines (40 loc) · 850 Bytes

扁平化对象.md

File metadata and controls

42 lines (40 loc) · 850 Bytes

扁平化对象

实现一个函数扁平化对象

const obj = {
  "a": {
    "b": {
      "c": {
        "d": 1
      }
    },
  },
  "aa": 2,
  "c": [
    1,
    2
  ]
}
// 输出
// { 'a.b.c.d': 1, aa: 2, 'c[0]': 1, 'c[1]': 2 }

参考实现

const isObj = data => Object.prototype.toString.call(data) === '[object Object]'
const flatObject = (obj, prefix = '') => {
  return Object.entries(obj).reduce((pre, cur) => {
    const key = !prefix ? cur[0] : isObj(obj) ? `${prefix}.${cur[0]}` : `${prefix}[${cur[0]}]`
    if (!isObj(cur[1]) && !Array.isArray(cur[1])) {
      return {
        ...pre,
        [key]: cur[1],
      }
    }
    return {
      ...pre,
      ...flatObject(cur[1], key)
    }
  }, {})
}
flatObject(obj)