首页 > 其他分享 >手写flat 与 flatMap

手写flat 与 flatMap

时间:2022-10-20 15:55:08浏览次数:54  
标签:isArray flat flatMap target prop item Array 手写

今天又收获一个生产故障,原因是测试过程中在浏览器里测的,浏览器版本较高,然后这个项目是内嵌在客户端里面,客户端内的浏览器版本稍微低一点,不支持flat方法和flatMap方法,所以。。。。手写一个呗!

Array.prototype.flat = function (prop = 1) {
  if (typeof (prop) !== 'number') {
    throw new TypeError('prop need Number');
  }
  const that = this;
  if (!Array.isArray(that)) {
    throw new TypeError('Data type is not Array');
  }
  let target = [];
  if (prop === Infinity) {
    target = that;
    do{
      target = target.flat(1);
    }while(target.some(d=>Array.isArray(d)));
    return target
  }
  if (prop <= 0) return that;
  if (that.every(i => !Array.isArray(i))) return that;
  prop--;
  that.forEach(item => {
    if (Array.isArray(item) && item.some(t => Array.isArray(t))) {
      target = target.concat(item.flat(prop));
    } else if (Array.isArray(item)) {
      target = target.concat(item.flat(1))
    } else {
      target.push(item)
    }
  })
  return target
}
Array.prototype.flatMap = function (mapper) {
  return this.map(mapper).flat();
};

  

标签:isArray,flat,flatMap,target,prop,item,Array,手写
From: https://www.cnblogs.com/maomao93/p/16810137.html

相关文章

  • 手写自定义springboot-starter,感受框架的魅力和原理
    一、前言Springboot的自动配置原理,面试中经常问到,一直看也记不住,不如手写一个starter,加深一下记忆。看了之后发现大部分的starter都是这个原理,实践才会记忆深刻。核心思......
  • 手写自定义springboot-starter,感受框架的魅力和原理
    一、前言Springboot的自动配置原理,面试中经常问到,一直看也记不住,不如手写一个starter,加深一下记忆。看了之后发现大部分的starter都是这个原理,实践才会记忆深刻。核心思......
  • [Typescript] 57. Medium - FlattenDepth
    Recursivelyflattenarrayuptodepthtimes.Forexample:typea=FlattenDepth<[1,2,[3,4],[[[5]]]],2>//[1,2,3,4,[5]].flattern2timestypeb=Fl......
  • ​Vue3插件机制剖析 + 手写实现Vuex
    使用插件这里以vuex使用为例,我们通过​​app.use(store)​​引入vuex插件:<divid="app"><h3@click="add">{{counter}}</h3></div><scriptsrc="http://unpkg.com/vue@nex......
  • FlatMap和map的区别
    FlatMap和map的区别官方解释map返回一个流,流里的元素是,原流元素经常函数处理的结果。也可以理解为将原流的元素,通过function进行处理后替换。flatMap返回一个流,先将......
  • 学习线程池原理从手写一个线程池开始
    概述线程池技术想必大家都不陌生把,相信在平时的工作中没有少用,而且这也是面试频率非常高的一个知识点,那么大家知道它的实现原理和细节吗?如果直接去看jdk源码的话,可能有一定......
  • 教你手写webpack常用loader
    前言webpack作为目前主流的前端构建工具,我们几乎每天都需要与它打交道。个人认为一个好的开源产品壮大的原因应该包括核心开发者的稳定输出以及对应生态的繁荣。对于生态......
  • 手写promise
    分析对于promise的复现,我们得先考虑promise的使用。使用时可以进行new操作,那么可以用构造函数获取class来构建存在then方法可以调用resolve和reject方法有三种状态p......
  • Java8Stream的flatmap应用(区别map)-优化嵌套for循环条件筛选
    场景Java8新特性-Stream对集合进行操作的常用API:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126070657前面讲Stream的常用api中讲到map的使用......
  • 自己动手写乞丐版线程池
    自己动手写乞丐版线程池前言在上篇文章线程池的前世今生当中我们介绍了实现线程池的原理,在这篇文章当中我们主要介绍实现一个非常简易版的线程池,深入的去理解其中的原理,......