一、 扁平化嵌套数组/展平和阵列孔——flat()

1、实现效果

var arr1 = [1, 2, [3, 4]];
arr1.flat(); // [1, 2, 3, 4]
var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat(2); // [1, 2, 3, 4, 5, 6]
//flat方法删除数组中的空槽:
var arr3 = [1, 2, , 4, 5];
arr3.flat(); // [1, 2, 4, 5]

该flat([depth])方法创建一个新数组,所有子数组元素以递归方式连接到指定的深度。depth深度级别指定嵌套数组结构应该展平的深度。默认为1。

2、方法解读:

该方法的实质是利用递归和数组合并方法 concat实现扁平。可以使用

Array.reduce()/Array.some()/Array.concat()

利用Array.reduce()和Array.concat()实现

 const flat1 = function (arr) {
return arr = arr.reduce((pre, cur) => Array.isArray(cur) ? pre.concat(flat1(cur)) : pre.concat(cur),
[])
}
var arr3 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]];
flat1(arr3); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]

利用Array.some()和Array.concat()实现

const flat2 = function(arr){
while(arr.some(item=>Array.isArray(item))){
arr=[].concat(...arr);
}
return arr;
}
var arr3 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]];
flat2(arr3); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]

  

二、数组去重——set()

1、实现效果

Array.from(new Set([1,2,3,3,4,4])) //[1,2,3,4]
[...new Set([1,2,3,3,4,4,5,6])] //[1,2,3,4,5]

set是ES6新出来的一种一种定义不重复数组的数据类型。
Array.from是将类数组转化为数组。
...是扩展运算符,将set里面的值转化为字符串。

2、方法解读

function unique(arr) {
var result =[];
for (var i = 0; i < arr.length; i++) {
for (var j = i+1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
j=++i;
} }
result.push(arr[i]);
}
return result;
}
var arr3 = [1, 2, 3, 3, 4, 5, 4];
unique(arr3);//(5) [1, 2, 3, 5, 4]

  

三、数组排序——sort()

1、实现效果

[1,3,2,5,4].sort();
[1,3,2,5,4].sort((a,b)=>b-a);

2、方法解读

冒泡排序

Array.prototype.bulesort = 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]];
}
}
}
return arr;
}
[3, 4, 2,1].bulesort()//[1,2,3,4]

  

四、最大值

1、实现效果

Math.max(...[1,2,3,4]); //4
Math.max.apply(this, [1, 2, 3, 4]); //4
[1, 2,3, 4].reduce((prev,cur)=>{
return Math.max(prev, cur);
},0);//4

2、方法解读
先排序,再取值。

五、求和

1、实现效果

[1, 2, 3, 4].reduce((prev,cur)=>{
return prev+cur;
},0); //10

2、方法解读

function sum(arr){
if (arr.length==0){
return 0;
} else if (arr.length == 1){
return arr[0];
}else{
return arr[0]+sum(arr.slice(1));
}
}
sum([1, 2, 3, 4]);//10

六、合并

[1,2,3].concat([5,6]);
[...[1,2,4],...[2,3,5,7]]

七、判断是否有值

[2, 3, 5].indexOf(3);//1
[2,3,5].includes(4)//false
[2, 3, 5].find((item) => { item === 3})//1
[2, 3, 5].findIndex((item) => item === 3)//1
[2, 3, 5].some(item=>{return item===3 })//true

  

八、类数组转化

Array.prototype.slice.call(arguments);
Array.prototype.slice.apply(arguments);
Array.from(arguments);
[...arguments]

  

九、每一项设置值

//array.fill(value, start, end)
[2, 3, 5].fill(true,false,true);//(3)
[false, false, false] [2, 3, 5].map(() => 0)//(3) [0, 0, 0]

  

十、每一项是否满足/某一项是否满足

[2, 3, 5].every(item=>{return item>2}) //false
[2, 3, 5].some(item =>{ return item > 2 })//true

  

十一、过滤数组

[2, 3, 5].filter(item => { return item > 2 })//(2) [3, 5]

  

十二、对象和数组转化

Object.keys({ name: '张三', age: 14 })//["name", "age"]
Object.values({name: '张三', age: 14 })// ["张三", 14]
Object.entries({ name: '张三', age:14 }) // (2) [Array(2), Array(2)]0: (2)["name", "张三"]1: (2)["age", 14]

挺好用的,先收藏一下  

本文转载原文https://segmentfault.com/a/1190000019126646

JavaScript数组的几个常用的API的更多相关文章

  1. JavaScript数组常用操作

    前言 相信大家都用惯了jquery或者underscore等这些类库中常用的数组相关的操作,如$.isArray,_.some,_.find等等方法.这里无非是对原生js的数组操作多了一些包装. 这里 ...

  2. 第二篇、JavaScript常用的API

    下面是我整理的一些JavaScript常用的API清单. 目录 元素查找 class操作 节点操作 属性操作 内容操作 css操作 位置大小 事件 DOM加载完毕 绑定上下文 去除空格 Ajax JS ...

  3. JavaScript数组所有API全解密

    全文共13k+字,系统讲解了JavaScript数组的各种特性和API. 数组是一种非常重要的数据类型,它语法简单.灵活.高效. 在多数编程语言中,数组都充当着至关重要的角色,以至于很难想象没有数组的 ...

  4. javascript数组常用的遍历方法

    本篇文章给大家带来的内容是关于javascript数组常用的遍历方法(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 本文主要介绍数组常见遍历方法:forEach.m ...

  5. JavaScript数组常用操作总结

    我们在日常开发过程中,使用到原生 JavaScript的时候,有时候会频繁的对数组进行操作,今天我把工作以来,经常用到的有关 JavaScript数组的方法总结一下,方便日后工作的时候查找使用! 一. ...

  6. Javascript数组操作

    使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间:思虑下,堪能如此继续之?当狠心深学下方是正道. 原文链接 ...

  7. 也谈面试必备问题之 JavaScript 数组去重

    Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...

  8. React常用的API说明

    楼主刚开始学习react,感受到了他的博大精深,看到很多莫名的用法,不知云云,找了很多没有找到参考手册,只有在中文社区和react官方看了一些,收集了一些比较常用的API,有补充的可以楼下评论补充.后 ...

  9. 教你用好 Javascript 数组

    原文链接:https://juejin.im/post/5d9769b26fb9a04df26c1b89 作为 Javascript 的标准对象之一,数组是非常底层而且实用的数据结构.虽然结构很简单, ...

随机推荐

  1. MiniSMB 网络性能测试 免费版本安装指南

    1) 烧录Image至USB 在Linux环境下可以运行以下命令(假设usb设备符号为/dev/sdb): root# tar -Jxf minismb-free-edition.img.tar.xz ...

  2. LVS+Keepalived深度理解,阐述你不知道的坑点

    1. LVS简介 1. 什么是LVS? LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内 ...

  3. woj1019 Curriculum Schedule 输入输出 woj1020 Adjacent Difference 排序

    title: woj1019 Curriculum Schedule 输入输出 date: 2020-03-19 10:43:00 categories: acm tags: [acm,woj] 水题 ...

  4. codeforces 3D (非原创)

    D. Least Cost Bracket Sequence time limit per test 1 second memory limit per test 64 megabytes input ...

  5. IDEA 安装常用操作一

    关于IDEA的下载,破解自行百度 一.安装完成的常用设置 SDK选择.编译版本的选择,单项目选择,全局选择 maven配置,单项目,全局配置 二.IDEA如何安装lombok https://www. ...

  6. mysql(一)--mysql架构和执行流程

    1. 一条查询 SQL 语句是如何执行的? 我们的程序或者工具要操作数据库,第一步要做什么事情? 跟数据库建立连接.   1.1. 通信协议 首先,MySQL 必须要运行一个服务,监听默认的 3306 ...

  7. apt 和 apt-get 之间有什么区别?

    使用ubuntu的朋友一定会接触一个命令就是apt-get . 使用该工具安装各种应用程序那叫一个爽. 在 Ubuntu 16.04 发行后,apt使用渐渐频繁起来. 那么,apt-get 与 apt ...

  8. 如何实现一个简易版的 Spring - 如何实现 @Component 注解

    前言 前面两篇文章(如何实现一个简易版的 Spring - 如何实现 Setter 注入.如何实现一个简易版的 Spring - 如何实现 Constructor 注入)介绍的都是基于 XML 配置文 ...

  9. Sentry React SourceMaps All In One

    Sentry React SourceMaps All In One React https://docs.sentry.io/platforms/javascript/guides/react/ h ...

  10. Laravel Homestead 安装 使用教程详解!

    1 Laravel Homestead 1 安装: 1 下载: http://www.vagrantup.com/downloads.html 1 配置: 1 1 测试: 1 1 ********** ...