Array 的一些常用 API

unshift、push、shift、pop

  • 这4个方法都会改变原数组
  • unshift() 从前面添加元素,push() 从后面追加元素,返回数组长度
  • shift() 删除第0个元素,pop() 删除最后一个元素,返回被删除的元素

slice

  • 不改变原数组
  • slice(m, n)返回原数组索引m(包含)到n(不包含)的元素数组。不传参数默认全部截取,只传一个参数,从该位置截取到末位。类似于String.prototype.substring
let arr = [1,2,3,4,5]
console.log(arr.slice()); // [ 1, 2, 3, 4, 5 ]
console.log(arr.slice(1)); // [ 2, 3, 4, 5 ]
console.log(arr.slice(2,4)); // [ 3, 4 ]
console.log(arr); // [1,2,3,4,5]

splice

  • 改变原数组。
  • splice(m,n,e1,e2,e3) 从索引m(包括)到n(不包括)的元素删除数组,再在该位置处添加e1,e2,e3。若n传入0,则只增加;若只传m和n,则只删除;若只传m,则从m位置删除到末位。放回删除元素数组
let arr = [1,2,3,4,5];
console.log(arr.splice(2), arr); // [ 3, 4, 5 ] [ 1, 2 ]
console.log(arr.splice(0,1,2), arr); // [ 1 ] [ 2, 2, 3, 4, 5 ]

concat

  • 拼接,不改变原数组
let arr = [1,2,3], arr1 = [4];
console.log(arr.concat(arr1, 5), arr); // [ 1, 2, 3, 4, 5, ] [ 1, 2, 3 ]
console.log([...arr, ...arr1, 5]); // [ 1, 2, 3, 4, 5 ] (对象也可以这样拼接,但重复的会覆盖,相当与 Object.assign)

of 和 from

  • of()类似于new Array(),但后者如果传入一个参数,则是设置数组长度。
  • from() 把伪数组转换为真数组,类似于[].slice.call()(或者写成Array.prototype.slice.call())
  • 伪数组有DOM集、arguments、{0: 'zero', 1: 'one', length: 2}
Array.of(1,2,3,4); // [ 1, 2, 3, 4 ]
Array.from({0: 'zero', 1: 'one', length: 2}); // [ 'zero', 'one' ]
判断数组的方法有
  • xx instanceof Array
  • Array.isArray()
  • Object.prototype.toString.call() === '[object Array]'
这里补充一点判断类型的技巧:
  • typeof操作符可以判断出number、boolean、string、function和undefined,而不能判断处具体的Object类型。

    • 判断Array要使用Array.isArray(arr);
    • 判断null请使用myVar === null;
    • 判断某个全局变量是否存在用typeof window.myVar === 'undefined';
    • 函数内部判断某个变量是否存在用typeof myVar === 'undefined'
  • 不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...},如果需要转换可以用 !!myVar
  • 不要使用new Number()、new Boolean()、new String() 创建包装对象;
  • 用parseInt()或parseFloat()来转换任意类型为Number;用String()来转换任意类型为String,或者直接调用某个对象的toString()方法;

indexOf 和 includes

  • indexOf() 返回索引,不存在就返回 -1。inclues()返回布尔值。
  • NaN 不能通过indexOf()判断,它是通过“===”比较的。
arr = [1, '2', null, NaN];
arr.indexOf(NaN); // -1
arr.includes(NaN); // true

filter、find 和 findIndex

  • filter() 返回数组。find() 返回值,不存在就返回 undefined。 findIndex() 返回第一个匹配到的索引,不存在就返回 -1。
// let arr = [1, '2', null, NaN];
// arr.filter(item => typeof item === 'number'); // [1, NaN]
// arr.find(item => typeof item === 'number'); // 1
// arr.findIndex(item => typeof item === 'number'); // 0

some 和 every

  • 返回布尔值
  • some()用于检测数组中的元素是否有满足指定条件的;every()用于检测数组中所有元素是否都符合指定条件。
  • 不对空数组进行检测,不改变原数组
let arr = [Array(), [], {}, null]
let res1 = arr.some((item, index, arr) => {return Object.prototype.toString.call(item) === '[object Array]'
})
let res2 = arr.every((item, index, arr) => {return Object.prototype.toString.call(item) === '[object Array]'
})
console.log(res1,res2); // true false

map 和 forEach

  • map() 对数组中的每个元素进行处理,得到新的数组,不改变原数组
  • forEach() 相当于 for 循环,返回 undefined,不改变原数组
let res = [0,1,2,3,4].map((item, idx)=> item * idx); // [ 0, 1, 4, 9, 16 ]

reduce

  • reduce((accumulator, currentValue, currentIndex, array)=>{}, initValue)
  • 第一个参数是迭代器函数,函数的作用是对数组中从左到右的每一个元素进行处理。第二个可选参数是累加器的初始值。没有时,累加器第一次的值为currentValue。
  • accumulator 累加器,即函数上一次调用的返回值。第一次的时候为 initialValue || arr[0]
  • currentValue 数组中函数正在处理的的值,第一次的时候是 initialValue || arr[1]
  • currentIndex 数组中函数正在处理的的索引
  • array 函数调用的数组
console.log([1,2,3].reduce((a,b,c,d)=>{console.log(a,b,c,d);return a+b; // 下一次的a}, 4)
); // 10
/* 4 1 0 [ 1, 2, 3 ]5 2 1 [ 1, 2, 3 ]7 3 2 [ 1, 2, 3 ] 
*/

当然累乘或者做其他业务也是可以的。

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

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

相关文章

Ovum观察:运营商通信PaaS发展趋势强劲

近日在佛罗里达州奥兰多市举行的Genband公司Perspectives16会议上,一个首要议题是在通信领域应对OTT威胁。 这场会议的主旨侧重于电信运营商和其他服务提供商如何应对日益严重的威胁,不过似乎这样的讨论有些晚了,因为许多大型运营商已经找到了…

WPF 托盘闪烁

WPF 托盘闪烁控件名:NotifyIcon作者:WPFDevelopersOrg - 弈虎、驚鏵原文链接: https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40。Visual Studio 2022。项目使用 MIT 开源许可协议。接着上一篇基础托盘。新增如下…

电机与系统计算机仿真作业,北邮计算机仿真期末大作业.docx

文档介绍:EvaluationWarning:ThedocumentwascreatedwithSpire..I玮凉爰p電大摩《计算机仿真》MATLAB课程设计报告学院: 自动化学院 专业: 自动化专业 班级: 2010211411姓名: 韩思宇 学号: 10212006 2013年01月14日转子绕线机控制系统综合仿真摘要:转子绕线机的控制系…

Software License Manager

slmgr -ilc lenovo.xrm-ms slmgr -ipk lenovo-lenovo-lenovo-lenovo-lenovo转载于:https://www.cnblogs.com/cuthead/p/license.html

Sqlserver数据库还原一直显示“正在还原…”解决方法

今天在Sqlerver还原数据库时一直就卡在那里提示“正在还原…”的状态,此时无法操作数据库,下面我来给大家介绍解决些问题的方法解决方法: 代码如下复制代码 RESTORE DATABASE demo FROM DISK D:/demo.bak WITH MOVE demo TO d:/demo.mdf, MOVE dem…

Information Retrieval 倒排索引 学习笔记

一,问题描述 在Shakespeare文集(有很多文档Document)中,寻找哪个文档包含了单词“Brutus”和"Caesar",且不包含"Calpurnia"。这其实是一个查询操作(Boolean Queries)。 在U…

计算机地址栏搜索不了网,我的电脑地址栏不见了怎么办 地址栏不见了如何解决...

导语:小编对电脑是比较痴迷的,因此喜欢在自己的电脑上进行各种操作,也经常会碰到一些问题。今天要为大家介绍的是在我的电脑地址栏不见了之后怎么办,熟悉电脑的朋友都能够了解。在我的电脑主界面里面,有一个地址栏&…

实践App内存优化:如何有序地做内存分析与优化

由于项目里之前线上版本出现过一定比例的OOM,虽然比例并不大,但是还是暴露了一定的问题,所以打算对我们App分为几个步骤进行内存分析和优化,当然内存的优化是个长期的过程,不是一两个版本的事,每个版本都需要收集线上内…

php OpenSSL 加解密

2018-1-6 17:10:19 星期六 1 $data 123456;2 $openssl_method AES-256-CBC;3 $openssl_iv_length openssl_cipher_iv_length($openssl_method);4 $openssl_iv openssl_random_pseudo_bytes($openssl_iv_length);5 $openssl_password openssl_random_pseudo_bytes(16);6 7 …

前端应该掌握的网络知识(1)

1、客户端:通过发送请求获取服务器资源的web浏览器等。 2、TCP/IP协议族按层次分为:应用层、传输层、网络层和数据链路层。 应用层决定了向用户提供应用服务时通信的活动。比如:FTP(文本传输协议)和DNS(域名…

WinForm(十四)窗体滚动日志

在桌面程序里,一般日志记录到文件里就可以了,但有的时间,也需要在窗体上动态滚动显示,这时,就需要引入日志框架了。这里引入的依旧是NLog(在我的Mini API系统里,用的也是NLog)。首先…

xp计算机找不到音量调节,WinXP电脑没声音且小喇叭不见了如何解决?

有用户在使用电脑听音乐的时候,突然发现电脑没有声音了,本来以为只是被禁了音,想着调节音量即可解决问题。但是当他想要点开音量小喇叭的时候,发现桌面任务栏通知区域的小喇叭不见了,这该怎么办呢?下面小编…

2018-2019-1 20165211 实验四 外设驱动程序设计

2018-2019-1 20165211 实验四 外设驱动程序设计 任务一 1.实验要求 学习资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章 提交康奈尔笔记的照片(可以多张) 2. 任务完成 任务二 1. 实验要求 在Ubuntu完成资源中全课中的“hqyj.嵌…

《ASP.NET Core 6框架揭秘》实例演示[31]:路由高阶用法

ASP.NET的路由是通过EndpointRoutingMiddleware和EndpointMiddleware这两个中间件协作完成的,它们在ASP.NET平台上具有举足轻重的地位,MVC和gRPC框架,Dapr的Actor和发布订阅编程模式都建立在路由系统之上。Minimal API更是将提升到了前所未有…

java中文乱码解决之道(五)—–java是如何编码解码的

编码&解码 1:I/O操作 2:内存 3:数据库 4:javaWeb 下面主要介绍前面两种场景,数据库部分只要设置正确编码格式就不会有什么问题,javaWeb场景过多需要了解URL、get、POST的编码,servlet的解码…

java反射--Class类

面向对象的世界里,万事万物皆对象。 1)类是谁的对象呢? 类是对象,类是java.lang.Class类的实例对象。 2)这个对象如何表示呢? package com.reflect;public class ClassDemo1 {public static void main(Stri…

win10系统按esc会弹出计算机,win10系统版本2004控制面板多出ESC是什么原因?

如果我们的电脑在升级了win102004控制面板多出ESC什么情况方法一:“干净启动”,排除第三方软体的影响1.停止非核心的程序运作(包括第三方杀毒、优化软体)2.情况允许的话,卸载设备中的第三方杀毒、管家、优化软件3.同时按【4.点击【服务】>…

CentOS6/7 配置守护进程

CentOS6.xCentOS6中转用Upstrat代替以前的init.d/rcX.d的线性启动方式。一、相关命令通过initctl help可以查看相关命令[rootlocalhost ~]# initctl help Job commands:start Start job.stop Stop job.restart …

Vue源码解析之数组变异

力有不逮的对象 众所周知,在 Vue 中,直接修改对象属性的值无法触发响应式。当你直接修改了对象属性的值,你会发现,只有数据改了,但是页面内容并没有改变。 这是什么原因? 原因在于: Vue 的响应式…

linux守护进程的编写

linux监控一个进程进行 代码如下: #!/bin/shcd /home/autoprocess/ autopgrep -f autoProcessNew.php | wc -l if [ "$auto" 0 ] then nohup php autoProcessNew.php & fi 监视autoProcessNew.php,使他一直监视转载于:https://www.cnblogs.com/matengfei123/p/…