js 实现数组扁平化

2023/1/30 javascript

# js 实现数组扁平化

# ES6 flat

function flatten(arr) {
  return arr.flat(Infinity);
}

# toString

function flatten(arr) {
  return arr
    .toString()
    .split(",")
    .map((item) => parseFloat(item));
}

# 循环递归

function flatten(arr) {
  let res = [];
  for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      res = res.concat(flatten(arr[i]));
    } else {
      res.push(arr[i]);
    }
  }
  return res;
}

# 巧用 reduce

const flatten = (arr, deep = 1) => {
  if (deep <= 0) return arr;
  return arr.reduce(
    (res, curr) =>
      res.concat(Array.isArray(curr) ? flatten(curr, deep - 1) : curr),
    []
  );
};

# 使用堆栈 stack

function flatten(arr) {
  const stack = [...arr];
  const res = [];
  while (stack.length) {
    // 使用 pop 从 stack 中取出并移除值
    const next = stack.pop();
    if (Array.isArray(next)) {
      // 使用 push 送回内层数组中的元素,不会改动原始输入
      stack.push(...next);
    } else {
      res.push(next);
    }
  }
  // 反转恢复原数组的顺序
  return res.reverse();
}

# while 循环 + some 方法

function flatten(arr) {
  while (arr.some((item) => Array.isArray(item))) {
    arr = [].concat(...arr);
  }
  return arr;
}
    我记得
    赵雷