数组,对象扁平化 | 刷题打卡

551 阅读1分钟

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

一、题目描述:

请使用 JavaScript 实现名为 flatten(input) 的函数,可以将传入的 input 对象(Object 或者 Array)进行扁平化处理

      const input = {
        a: 1,
        b: [1, 2, { c: true }, [3]],
        d: { e: 2, f: 3 },
        g: null,
      };
      function flatten(input) {

      }
      flatten(input);
// 返回
      {
        "a": 1,
        'b[0]': 1,
        'b[1]': 2,
        'b[2].c': true,
        'b[3][0]': 3,
        'd.e': 2,
        'd.f': 3,
      };

二、思路分析:

递归思想,一个复杂的对象,可能是数组,可能是对象,也可能是其它无嵌套结构的值,需要用递归方法到无深层嵌套的一层把值赋给返回的对象,递归时需要保存key值

三、AC 代码:

     function flatten(obj, key = '', res = {}, isArray = false) {
        for (let [k, v] of Object.entries(obj)) {
          if (v) {
            if (Array.isArray(v)) {
              let tmp = isArray ? `${key}[${k}]` : `${key}${k}`;
              flatten(v, tmp, res, true);
            } else if (typeof v === 'object') {
              let tmp = isArray ? `${key}[${k}].` : `${key}${k}.`;
              flatten(v, tmp, res);
            } else {
              let tmp = isArray ? `${key}[${k}]` : `${key}${k}`;
              res[tmp] = v;
            }
          }
        }
        return res;
      }

四、总结:

试着参加掘金活动打个卡;