拍平数组

32 阅读1分钟

拍平数组

递归实现

function flatten(arr: any): any[] {
  if (!Array.isArray(arr)) {
    return [arr];
  }

  let res: any[] = [];

  arr.forEach((item) => {
    flatten(item).forEach((item) => res.push(item));
  });

  return res;
}
// 测试
console.log(flatten([1, [2, 3], [4, 5, [6, 7], 8], 9]));
console.log(flatten([1, [2, [3, ["a", [true], "b"], 4], 5], 6]));

堆实现

  • 一切递归都可以用堆来实现
function flatten(arr: any[]) {
  const res = [];
  const stack = [arr];

  while (stack.length) {
    const item = stack.pop();
    if (Array.isArray(item)) {
      item.reverse().forEach((one) => stack.push(one));
    } else {
      res.push(item);
    }
  }

  return res;
}
// 测试
console.log(flatten([1, [2, 3], [4, 5, [6, 7], 8], 9]));
console.log(flatten([1, [2, [3, ["a", [true], "b"], 4], 5], 6]));