es6 数组合并_13个不low的JS数组操作,你需要知道一下

8ad614df7d60debbf9d54bccf1ea116c.png

作者 | 火狼1来源 | https://juejin.im/post/5c92e385e51d450ce11df1d1

前言

本文主要从应用来讲数组api的一些骚操作;如一行代码扁平化n维数组、数组去重、求数组最大值、数组求和、排序、对象和数组的转化等;这些应用场景你可以用一行代码实现吗?

1、扁平化n维数组

1.终极篇
[1,[2,3]].flat(1) //[1,2,3][1,[2,3,[4,5]].flat(1) //[1,2,3,4,5][1,[2,3,[4,5]]].toString()  //'1,2,3,4,5'[1[2,3,[4,5[...]].flat(Infinity) //[1,2,3,4...n]
Array.flat(n)是ES10扁平数组的api,
n表示数组嵌套的深度,如果数组嵌套两层,n取值大于或等于1都可以,n值为Infinity时维度为无限大。2.开始篇
function flatten(arr) {    while(arr.some(item=>Array.isArray(item))) {        arr = [].concat(...arr);    }    return arr;}flatten([1,[2,3]]) //[1,2,3]flatten([1,[2,3,[4,5]]) //[1,2,3,4,5]
实质是利用递归和数组合并方法concat实现扁平。

2、去重

1.终极篇
Array.from(new Set([1,2,3,3,4,4])) //[1,2,3,4][...new Set([1,2,3,3,4,4])] //[1,2,3,4]
set是ES6新出来的一种一种定义不重复数组的数据类型。
Array.from是将类数组转化为数组。
...是扩展运算符,将set里面的值转化为字符串。2.开始篇
Array.prototype.distinct = function(){ var arr = this,  result = [],  i,  j,  len = arr.length; for(i = 0; i < len; i++){  for(j = i + 1; j < len; j++){   if(arr[i] === arr[j]){    j = ++i;   }  }  result.push(arr[i]); } return result;}[1,2,3,3,4,4].distinct(); //[1,2,3,4]
取新数组存值,循环两个数组值相比较。

3、排序

1.终极篇
[1,2,3,4].sort((a, b) => a - b); // [1, 2,3,4],默认是升序[1,2,3,4].sort((a, b) => b - a); // [4,3,2,1] 降序
sort是js内置的排序方法,参数为一个函数 2.开始篇 冒泡排序:
Array.prototype.bubleSort=function () {    let arr=this,        len = arr.length;    for (let outer = len; outer >= 2; outer--) {      for (let inner = 0; inner <= outer - 1; inner++) {        if (arr[inner] > arr[inner + 1]) {          //升序          [arr[inner], arr[inner + 1]] = [arr[inner + 1], arr[inner]];          console.log([arr[inner], arr[inner + 1]]);        }      }    }    return arr;  }[1,2,3,4].bubleSort() //[1,2,3,4]
选择排序
  Array.prototype.selectSort=function () {        let arr=this,            len = arr.length;        for (let i = 0, len = arr.length; i < len; i++) {    for (let j = i, len = arr.length; j < len; j++) {      if (arr[i] > arr[j]) {        [arr[i], arr[j]] = [arr[j], arr[i]];      }    }  }    return arr;  }  [1,2,3,4].selectSort() //[1,2,3,4]

4、最大值

1.终极篇
Math.max(...[1,2,3,4]) //4Math.max.apply(this,[1,2,3,4]) //4[1,2,3,4].reduce( (prev, cur,curIndex,arr)=> { return Math.max(prev,cur);},0) //4
Math.max()是Math对象内置的方法,参数是字符串;
reduce是ES5的数组api,参数有函数和默认初始值;
函数有四个参数,pre(上一次的返回值),cur(当前值),curIndex(当前值索引),arr(当前数组)2.开始篇 先排序再取值

5、求和

1.终极篇
eval([1,2,3,4].join('+')] //10[1,2,3,4].arr.reduce((prev, cur) =>prev + cur) //10
2.开始篇
function sum(arr) {  var len = arr.length;  if(len == 0){    return 0;  } else if (len == 1){    return arr[0];  } else {    return arr[0] + sum(arr.slice(1));  }}sum([1,2,3,4]) //10
利用slice截取改变数组,再利用递归求和。

6、合并

1.终极篇
[1,2,3,4].concat([5,6]) //[1,2,3,4,5,6][...[1,2,3,4],...[4,5]] //[1,2,3,4,5,6][1,2,3,4].push.apply([1,2,3,4],[5,6]) //[1,2,3,4,5,6]
2.开始篇
let arr=[1,2,3,4];[5,6].map(item=>{   arr.push(item)}) //arr值为[1,2,3,4,5,6],注意不能直接return出来,return后只会返回[5,6]

7、判断是否包含值

1.终极篇
[1,2,3].includes(4) //false[1,2,3].indexOf(4) //-1 如果存在换回索引[1, 2, 3].find((item)=>item===3)) //3 如果数组中无值返回undefined[1, 2, 3].findIndex((item)=>item===3)) //2 如果数组中无值返回-1
includes(),find(),findIndex()是ES6的api2.开始篇
[1,2,3].some(item=>{  return item===3}) //true 如果不包含返回false

8、类数组转化

1.终极篇
Array.prototype.slice.call(arguments) //arguments是类数组(伪数组)Array.prototype.slice.apply(arguments)Array.from(arguments)[...arguments]
类数组:表示有length属性,但是不具备数组的方法
call,apply:是改变slice里面的this指向arguments,所以arguments也可调用数组的方法
Array.from是将类似数组或可迭代对象创建为数组
...是将类数组扩展为字符串,再定义为数组2.开始篇
Array.prototype.slice = function(start,end){      var result = new Array();      start = start || 0;      end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键      for(var i = start; i < end; i++){           result.push(this[i]);      }      return result; } 

9、每一项设置值

1.终极篇
[1,2,3].fill(false) //[false,false,false]注:fill填充对象会报错
fill是ES6的方法 2.开始篇
[1,2,3].map(() => 0)

10、每一项是否满足

[1,2,3].every(item=>{return item>2}) //false
every是ES5的api,每一项满足返回 true

11、有一项满足

[1,2,3].some(item=>{return item>2}) //true
some是ES5的api,有一项满足返回 true

12、过滤数组

[1,2,3].filter(item=>{return item>2}) //[3]
filter是ES5的api,返回满足添加的项的数组

13、对象和数组转化

Object.keys({name:'张三',age:14}) //['name','age']Object.values({name:'张三',age:14}) //['张三',14]Object.entries({name:'张三',age:14}) //[[name,'张三'],[age,14]]Object.fromEntries([name,'张三'],[age,14]) //ES10的api,Chrome不支持 , firebox输出{name:'张三',age:14}
本文完83d8034dfa99529f0153d3a52552f2cd.pngb39b357762418c2fdda46aca2a5b5ed8.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java控制cmd导出dmp文件_cmd的操作命令导出导入.dmp文件

1:G:\Oracle\product\10.1.0\Client_1\NETWORK\ADMIN目录下有个tnsname.ora文件&#xff0c;内容如下&#xff1a;hz_rmdb (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 19.109.113.36)(PORT 1521))(CONNECT_DATA (SERVER DEDICATED)(SERVICE_NAME rmdb)))其中&#xff1a…

web developer tips (1):创建、管理、应用样式表的强大工具

原文链接&#xff1a;Powerful CSS Tools to Create, Manage and Apply Styles Visual Studio 2008 包含了三个新的CSS样式工具窗口&#xff1a; 1、应用样式&#xff08;Apply Styles &#xff09; 2、管理样式&#xff08;Manage Styles&#xff09; 3、CSS属性&#xff08;C…

excel去重怎么操作_excel数据技巧:不用公式如何快速去重

编按&#xff1a;哈喽&#xff0c;大家好&#xff01;在我们平时处理数据的时候&#xff0c;经常会发现一些重复的数据&#xff0c;这不仅会降低我们的工作效率&#xff0c;还会影响我们后续对数据的分析。今天就为大家分享4种不借助公式就能在excel中删除重复值的方法&#xf…

java制作h5视频聊天_JAVA实现大华摄像头WEB方式实时显示视频,H5界面展示方式思路。...

JAVA实现大华摄像头WEB方式实时显示视频,H5界面展示方式思路。2018-09-17问题:大华IPC枪型摄像头需要在WEB中显示实时监控视频,官方提供的SDK只有C#的桌面程序访问方式。解决思路:RTSP协议访问方式将RTSP流转换成hls文件在H5的video播放器中进行播放实时视频。一、首先将摄像头…

python用电度数设计_无所不能的Python之配电设计自动化系统

诚如题目所言&#xff0c;本人结合Python程序设计与配电设计的互补性打算开发一个配电设计自动化系统&#xff0c;用来提高配电设计的工作效率。本人目前处在配电设计行业&#xff0c;已深耕多年&#xff0c;期间一直有学习Python&#xff0c;后来发现Python的很多库都能解决配…

Google Maps地图投影全解析

原文出处&#xff1a;http://www.cnblogs.com/LionGG/archive/2009/04/20/1439905.html Google Maps、Virtual Earth等网络地理所使用的地图投影&#xff0c;常被称作Web Mercator或Spherical Mercator&#xff0c;它与常规墨卡托投影的主要区别就是把地球模拟为球体而非椭球体…

java内存模型 创建类_JVM内存模型及String对象内存分配

昨天看了一篇关于《Java后端程序员1年工作经验总结》的文章&#xff0c;其中有一段关于String和StringBuffer的描述&#xff0c;对于执行结果仍然把握不准&#xff0c;趁此机会也总结了下JVM内存模型。1、JVM运行时数据区域关于JVM内存模型之前也了解过一些&#xff0c;也是看过…

微信小程序数据拼接_微信小程序 数据预拉取

数据预拉取预拉取能够在小程序冷启动的时候通过微信后台提前向第三方服务器拉取业务数据&#xff0c;当代码包加载完时可以更快地渲染页面&#xff0c;减少用户等待时间&#xff0c;从而提升小程序的打开速度 。使用流程1. 配置数据下载地址登录小程序 MP 管理后台&#xff0c;…

给ULWOW 写的广告效果(缓动切换)

应 幽狼魔兽 站长所托&#xff0c;写了一个 广告切换效果&#xff08;点击查看DEMO&#xff09; 形式是常见的形式&#xff0c;但是在功能上有一定的拓展。 主要功能&#xff1a; 1&#xff0c;自动检测广告图片个数 生产广告序列 2&#xff0c;缓动切换&#xff0c;仿原版FLA…

java ecdh秘钥交换_DH密钥交换和ECDH原理(转)

下面我们以Alice和Bob为例叙述Diffie-Hellman密钥交换的原理。1,Diffie-Hellman交换过程中涉及到的所有参与者定义一个组&#xff0c;在这个组中定义一个大质数p&#xff0c;底数g。2,Diffie-Hellman密钥交换是一个两部分的过程&#xff0c;Alice和Bob都需要一个私有的数字a&am…

生活GOOGLE,GOOGLE生活

从上网起就知道GOOGLE的了&#xff0c;不过那个时候傻乎乎的就知道新浪和搜狐&#xff0c;随着网龄的慢慢增长对互联网也慢慢的了解的了&#xff0c;就发现其实生活中慢慢的离不开很多的东西&#xff0c;电脑天天在用&#xff0c;可是今天让我感触最深的是GOOGLE无处不在&#…

python爬虫源代码_零基础自学爬虫(5)B站有哪些爬虫的视频学习资源-附Python源代码...

前几天看到有人提问&#xff1a;。b站哪个python爬虫视频讲的较好&#xff1f;谢谢各位能解答一下。&#xff1f; 于是顺手写了一个小爬虫&#xff0c;把数据爬了下来。 今天有空放一下源代码。数据源&#xff0c;是在B站搜索框直接搜索“爬虫”&#xff0c;并选择按收藏排序。…

tcl手机 手写java_TCL魔法手指V2.0 (使笔记本Synaptics触摸板变身为手写板)

TCL魔法手指功能概述识别率最高&#xff1a;最新的识别核心&#xff0c;识别率达到99.3&#xff05;&#xff0c;并配合目前最好的多字切分技术&#xff0c;可流畅的连笔书写&#xff0c;随意的倒插笔书写&#xff0c;完全尊重您的书写习惯。无需特殊硬件&#xff1a;只要您的笔…

用VBA去除Excel工作表保护密码

今天帮同事解决个EXCEL问题&#xff0c;现记在这&#xff0c;以作备忘 现象&#xff1a; 想要修改保护单元 格的内容&#xff0c;在使用“工具”菜单“保护”子菜单的“撤消工作表保护”命令&#xff0c;这时要求输入密码。 解决方案&#xff1a;网上找到一文http://www.excel1…

python连接数据库mysql错误1045_django 连接数据库出现1045错误的解决方式

根据菜鸟教程Django教程学习&#xff0c;运行"python manage.py migrate" 报错&#xff0c;出现django.db.utils.OperationalError: (1045, “Access denied for user ‘账号localhost (using password: YES)”)错误。这种错误指的是连接数据库时账号密码错误。1.只需…

MVC学习笔记1 MVC概述

MVC概述MVC三种角色– Model&#xff1a; 用于存储数据的组件&#xff08;与领域模型概念不同&#xff09;。– View&#xff1a; 根据Model数据进行内容展示的组件– Controller&#xff1a;接受并处理用户指令&#xff08;操作Model&#xff09;&#xff0c;选择一个Vie…

python wxpython_python GUI wxPython

wxPython 安装 pip install wxPython (安装失败)推荐豆瓣镜像pip3 install -i https://pypi.douban.com/simple wxpythonC:\Users\dangzhengtao>pip3 install -i https://pypi.douban.com/simple wxpythonLooking in indexes: https://pypi.douban.com/simpleCollecting wxp…

java多个页面爬取_java爬取html页面(简易通用版)

项目环境ide&#xff1a;intellij IDEA 2017.2.5编程语言&#xff1a;java数据库&#xff1a;mysql管理工具&#xff1a;maven需要导包&#xff1a;mysql-connector-java&#xff0c;jsoup(解析html)等&#xff0c;如果要解析json可能还要导入gson的包。我把重要的依赖贴出来(默…

设计一个医院

源于个人网站&#xff1a;http://programmer.2008red.com/programmer/article_647_777_1.shtml 收到一封来自Exoweb的邮件&#xff0c;让去面试&#xff08;败的很惨&#xff0c;呵呵。过了好长时间了&#xff0c;都忘记这事了&#xff0c;结果这公司来了邮件&#xff0c;说不能…

powerbi的功能介绍_Power BI:1分钟快速生成可视化报表

1.什么是Power BI &#xff1f;Power BI 是微软推出的可视化工具&#xff0c;先来看看微软官方是怎么介绍的&#xff1a;使用用于自助服务和企业商业智能 (BI) 的统一、可扩展平台&#xff08;该平台易于使用&#xff0c;可帮助获取更深入的数据见解&#xff09;&#xff0c;连…