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,一经查实,立即删除!

相关文章

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…

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…

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

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

MVC学习笔记1 MVC概述

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

设计一个医院

源于个人网站&#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;连…

易语言 java支持_开源Java客户端可以连接易语言服务器

我们的服务端处理客户端的连接请求是同步进行的&#xff0c; 每次接收到来自客户端的连接请求后&#xff0c;都要先跟当前的客户端通信完之后才能再处理下一个连接请求。 这在并发比较多的情况下会严重影响程序的性能&#xff0c;为此&#xff0c;我们可以把它改为如下这种异步…

Javascript--File对象

描述: 提供对文件属性的访问.属性: 属性描述Attributes设置或返回文件或文件夹的属性DateCreated返回指定文件或文件夹的创建时间DateLastAccessed返回最近访问文件或文件夹的创建时间DateLastModified返回最后修改指定文件和文件夹的日期和日期Drive返回指定文件或文件夹所在的…

idea怎么调试jsp页面_解决idea的c标签错误

Hello,World.土土来啦&#xff01;最近做jq项目&#xff0c;遇到各种各样的问题。首先就是c标签的错误。对&#xff0c;没错&#xff0c;就是这一串因为土土上学期学的是jsp,所以是在myeclipse做的&#xff0c;这学期就想在idea做后端。然后复制粘贴之前的项目的时候&#xff0…

[SlickEdit] SlickEdit支持目录别名FTP控件更新

有阵没写代码了&#xff0c;SlickEdit升级到2009还没怎么用过&#xff0c;Option面板改动得更像Eclipse了&#xff0c;反正IDE工具也不知道到底谁抄袭谁&#xff0c;只是Symbol Coloring设置太唬人了吧&#xff0c;&#xff0c;默认的symbol coloring总是出现字符偏移&#xff…

有一台服务器远程失败其他电脑可以_使用闲置电视盒子打造家庭网盘和远程下载器和小型服务器(二)...

使用闲置电视盒子打造家庭网盘和远程下载器系列(二)本系列分为五章一、综述二、电视盒子的root三、app的安装和服务器环境的搭建四、网盘系统的部署和使用五、远程下载系统搭建和实现昨天写了第一章&#xff0c;我这是首次写东西&#xff0c;没想到能得到这么多朋友关注&#x…

基于C#.NET的--Windows进程管理工具

基于.NET(C#)编写。 实现了进程的树状显示父子关系&#xff0c;其中应用到了WMI编程&#xff0c;以及P-invoke. 下载地址&#xff1a; 点击右键另存为 地址如上&#xff0c;需要安装.NET环境&#xff0c;地址:http://www.microsoft.com/downloads/details.aspx?displaylangzh-…

前端的请求最大线程数是多少啊_面试官:创建多少个线程合适,我该怎么说?...

转载&#xff1a;https://mp.weixin.qq.com/s/j5d4Jtxo0RgJWgpnG9HxlQ为什么要使用多线程&#xff1f;防止并发编程出错最好的办法就是不写并发程序既然多线程编程容易出错&#xff0c;为什么它还经久不衰呢&#xff1f;A&#xff1a;那还用说&#xff0c;肯定在某些方面有特长…

百度地图infowindow的close事件_百度地图蒙圈:车主要加油误导母婴店 跑偏理由令人啼笑皆非...

常在江湖飘&#xff0c;哪有不挨刀。经常驾车出门在外的您&#xff0c;有过被导航坑的经历么&#xff1f;其实在早些年手机导航刚刚兴起的时候&#xff0c;这类现象确实比较常见&#xff0c;但是到了如今大数据的时代&#xff0c;手机导航数据更新比较及时&#xff0c;问题已经…

商业模式新生代_业务分析基础 - 商业模式新生代01篇

商业模式画布商业模式新生代由亚历山大奥斯特瓦德&#xff08;Alexander Osterwalder&#xff09;和伊夫皮尼厄&#xff08;Yves Pigneur&#xff09;编写&#xff0c;发表于2016年。该书提出了商业模式画布模型&#xff0c;既可以用于创业公司&#xff08;Start-ups&#xff0…