flat简单实现 - 茴字有4种写法 😁

function *flat(array) {
  for (const item of array) {
    if (Array.isArray(item)) {
      yield* flatMap(item);
    }else {
      yield item;
    }
  }
}

function flat2(arr) {
  const res = [];
  const fmFunc = function(array) {
    for (const item of array) {
      if (Array.isArray(item)) {
        fmFunc(item);
      } else {
        res.push(item);
      }
    }
  }
  fmFunc(arr);
  return res;
}

function flat3(arr) {
  return arr.reduce((prev, cur) => {
    if (Array.isArray(cur)) {
      return prev.concat(flat3(cur));
    } else {
      return prev.concat(cur);
    }
  }, [])
}

function flat4(arr) {
  const res = [];
  const stack = arr.reverse().slice();

  while (stack.length > 0) {
    const top = stack.pop();
    if (Array.isArray(top)) {
      stack.push(...top.reverse());
    } else {
      res.push(top);
    }
  }
  return res;
}


const darr = [[1, 2, 3], [4], [6, [7, 8, 9]]];

const farr = [...flat(darr)];
console.log(`flatArr ${farr}`);

const farr2 = flat2(darr);
console.log(`flatArr2 ${farr2}`);

const farr3 = flat3(darr);
console.log(`flatArr3 ${farr3}`);

const farr4 = flat4(darr);
console.log(`flatArr4 ${farr4}`);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容