1. /*
    2. const obj = {
    3. a: {
    4. b: 1,
    5. c: 2,
    6. d: {e: 5}
    7. },
    8. b: [1, 3, {a: 2, b: 3}],
    9. c: 3
    10. }
    11. flatten(obj) 结果返回如下
    12. // {
    13. // 'a.b': 1,
    14. // 'a.c': 2,
    15. // 'a.d.e': 5,
    16. // 'b[0]': 1,
    17. // 'b[1]': 3,
    18. // 'b[2].a': 2,
    19. // 'b[2].b': 3
    20. // c: 3
    21. // }
    22. */
    1. function isObject(val) {
    2. return typeof val === 'object' && val !== null;
    3. }
    4. function flatten(obj) {
    5. if (!isObject(obj)) return
    6. let result = {}
    7. // 递归方法
    8. function dfs (cur, preFix) {
    9. if (isObject(cur)) {
    10. // 是否是数组
    11. if (Array.isArray(cur)) {
    12. cur.forEach((item, index) => {
    13. // 注意:第二个参数格式
    14. dfs(item, `${preFix}[${index}]`)
    15. })
    16. } else {
    17. for (let i in cur) {
    18. // 注意:第二个参数格式
    19. dfs(cur[i], `${preFix}${preFix ? '.' : ''}${i}`)
    20. }
    21. }
    22. } else {
    23. // result[''] = cur 就是将 cur 赋值给 result
    24. result[preFix] = cur
    25. }
    26. }
    27. dfs(obj, '')
    28. return result
    29. }
    30. flatten(obj)