Глубокий массив Javascript и выравнивание объектов

JavaScript

предисловие

Иногда структура данных, возвращаемая из бэкенда во фронтенд, слишком глубоко вложена, и доступ к свойствам внутри слишком сложен, поэтому существует метод выравнивания глубоких массивов и объектов.

Выравнивание массива

Реализация простой версии:

 function flatten(array, result) {
            result = result || [];
            array.forEach(element => {
                if (Array.isArray(element)) {
                    flatten(element, result);
                } else {
                    result.push(element);
                }
            });
            return result;
        }
        var arr = [2, [3, 4],
            [
                [5],
                [6]
            ]
        ];
        var result = flatten(arr);
        console.log(result);

Результат:

Исходный код реализации подчеркивания:

 // Internal implementation of a recursive `flatten` function.
  var flatten = function(input, shallow, strict, output) {
    output = output || [];
    var idx = output.length;
    for (var i = 0, length = getLength(input); i < length; i++) {
      var value = input[i];
      if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
        // Flatten current level of array or arguments object.
        if (shallow) {
          var j = 0, len = value.length;
          while (j < len) output[idx++] = value[j++];
        } else {
          flatten(value, shallow, strict, output);
          idx = output.length;
        }
      } else if (!strict) {
        output[idx++] = value;
      }
    }
    return output;
  };

Плоские предметы

/* 题目*/
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'
}

function flattenObj(obj, tempKey, resultObj) {
            tempKey = tempKey || '';
            resultObj = resultObj || {};
            for (let key in obj) {
                var value = obj[key];
                if (typeof value == 'object') {
                    tempKey = tempKey + key + '.';
                    flattenObj(value, tempKey, resultObj);
                    tempKey = '';
                } else {
                    tempKey = tempKey + key;
                    resultObj[tempKey] = value;
                }
            };
            return resultObj;
        }

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

тестовый код

 var entryObj = {
            a: {
                b: {
                    c: {
                        dd: 'abcdd'
                    }
                },
                d: {
                    xx: 'adxx'
                },
                e: 'ae'
            }
        };
        var result = flattenObj(entryObj);
        console.log(result);

выходной результат