第71题 实现一个对象的 flatten 方法(阿里)

题目描述

    const obj = {
     a: {
            b: 1,
            c: 2,
            d: {e: 5}
        },
     b: [1, 3, {a: 2, b: 3}],
     c: 3
    }
    
    flatten(obj) // 结果返回如下
    // {
    //  '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 isObject(val) {
      return typeof val === "object" && val !== null;
    }
    
    function flatten(obj) {
      if (!isObject(obj)) {
        return;
      }
      let res = {};
      const dfs = (cur, prefix) => {
        if (isObject(cur)) {
          if (Array.isArray(cur)) {
            cur.forEach((item, index) => {
              dfs(item, `${prefix}[${index}]`);
            });
          } else {
            for (let k in cur) {
              dfs(cur[k], `${prefix}${prefix ? "." : ""}${k}`);
            }
          }
        } else {
          res[prefix] = cur;
        }
      };
      dfs(obj, "");
    
      return res;
    }
    flatten();
Last Updated:
Contributors: leeguooooo