多维转一维

数组扁平化

/ 多维数组转一维数组
function flatten(arr) {
  return arr.reduce((all, curr) => {
    if (Array.isArray(curr)) {
      return [...all, ...flatten(curr)];
    } else {
      return [...all, curr];
    }
  }, []);
}

const res0 = flatten([1, 2, [3, 4, [5, 6]]]);
console.log(res0); // [1, 2, 3, 4, 5, 6]

对象扁平化

// 多维对象转一维对象
function flattenObj(obj) {
  let res = {};
  for (let key in obj) {
    if (typeof obj[key] === "object") {
      res = { ...res, ...flattenObj(obj[key]) };
    } else {
      res[key] = obj[key];
    }
  }
  return res;
}

const res1 = flattenObj({ a: 1, b: { c: 2, d: { e: 3 } } });
console.log(res1); // {a: 1, c: 2, e: 3}

扁平化数组对象

// 多维数组对象转一维数组对象
function flattenArrObj(arr) {
  return arr.reduce((all, curr) => {
    if (Array.isArray(curr)) {
      return [...all, ...flattenArrObj(curr)];
    } else if (typeof curr === "object") {
      return [...all, flattenObj(curr)];
    } else {
      return [...all, curr];
    }
  }, []);
}

const res2 = flattenArrObj([1, 2, { a: 3, b: { c: 4 } }, [5, 6]]);
console.log(res2); // [1, 2, {a: 3, c: 4}, 5, 6]