JS004. 获取数组最后一个元素且不改变数组的四种方法
TAG: Array.length Array.prototype.reverse() Array.prototype.slice() Array.prototype.pop()
Array对象 - pop( )
pop() 方法用于删除数组的最后一个元素并返回删除的元素,要点 - 获取并删除。
let arr = [0, 1, 2, 3]
let element = arr.pop() console.log('arr: ', arr, ' & arr.length: ', arr.length)
// arr: [0, 1, 2] & arr.length: 3 console.log('element: ', element, ', type: ', typeof(element))
// element: 3, type: Number
通过 扩展运算符 来执行pop方法,获取数组最后一个元素的同时不会改变它本身。
var arr = [0,1,2,3]
var element = [...arr].pop() console.log('arr: ', arr, ', element: ', element)
// arr: [0, 1, 2, 3], element: 3 console.log('arr.length: ', arr.length, ', type: ', typeof(element))
// arr.length: 4, type: Number
数组的实质就是开辟一个栈内存并指向堆中的一个连续的储存空间,而 [...arr] 从逻辑上来讲就是占用一节新的栈内存并在堆内存中存放一个新的数组,而不仅仅是分配一个新的栈并指向已有的堆内存数组,把arr在语法层面展开,所在堆栈的值迭代浅拷贝到新的栈内存并指向新的堆内存中。
需要特别注意的是扩展运算符与 Object.assign( ) 语法相同,都是浅拷贝一层,如果是多维数组就出现问题了。
var a = [[1], [2], [3]]
var b = [...a]
b.shift().shift() // 1 // 这样做数组a也受到了影响!
console.log(a) // [[2], [3]]
如果想深入探究扩展运算符的底层逻辑和扩展使用,建议研读MDN提供的文档 MDN展开语法。
Array对象 - slice( )
slice() 方法可从已有的数组中返回选定的元素。
let arr = [0, 1, 2, 3]
let element = arr.slice(-1) console.log('arr: ', arr, ', element: ', element)
// arr: [0, 1, 2, 3], element: 3
Array对象 - reverse( )
reverse() 方法用于颠倒数组中元素的顺序。
let arr = [1, 2, 3]
let [element] = arr.reverse() console.log(elelment)
// 3
console.log(arr)
// [3, 2, 1]
可以看到该方法虽然也可以拿到最后一个元素但同时也会改变数组本身。
巧用扩展运算符,就可以达到不改变数组本身获取最后一个元素的目的。
let arr = [1, 2, 3]
let [arg] = [...arr].reverse() console.log(arg)
// 3
console.log(arr)
[1, 2, 3]
Array属性 - length
length 属性可设置或返回数组中元素的数目。
let arr = [0, 1, 2, 3]
let element = arr[arr.length - 1] console.log('arr.length: ', arr.length, ', element: ', element)
// arr.length: 4, element: 3
我的其他相关文章:
JS005. 拷贝引用数据类型Array使其指向不同堆的解决方案
ES6:使用解构赋值仅用一行定义多个相同的数组,且指向堆不同(解构赋值)
- END -
JS004. 获取数组最后一个元素且不改变数组的四种方法的更多相关文章
- 让一个图片在div中居中(四种方法)
第一种方法: <div class="title"> <div class="flag"></div> <div cl ...
- js 获取数组最后一个元素
当然有很多中做法 我这边就随便写几个最常用 最简单的方法把 # shift 删除数组第一个元素,并返回该元素,跟pop差不多 var a = ["aa","bb" ...
- 每天php函数 - 数组最后一个元素取出
复制代码代码如下: $array=array(1,2,3,4,5); echo $array[count($array)-1];//计算数组长度,然后获取数组最后一个元素,如果数组中最后一个元素 ...
- 数组最后一个元素的 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁
数组最后一个元素$arr = array( 1 , 2 , 3 , 4 );foreach ( $arr as & $value ) { $value = $value ...
- 【c语言】输入一个递增排序的数组的一个旋转,输出旋转数组中的最小元素
//旋转数组的最小数字 //题目:把一个数组最開始的若干个元素搬到数组的末尾.我们称之为数组的旋转. //输入一个递增排序的数组的一个旋转.输出旋转数组中的最小元素. //比如:数组{3.4,5,1, ...
- 42.输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的。
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的. 这道题有很多烟雾弹: 首先如果有多对,最前面的两个数就是乘积最小的, ...
- PHP从数组中删除元素的四种方法实例
PHP从数组中删除元素的四种方法实例 一.总结 一句话总结:unset(),array_splice(),array_diff(),array_diff_key() 二.PHP从数组中删除元素的四种方 ...
- 如何使用T-SQL备份还原数据库及c#如何调用执行? C#中索引器的作用和实现。 jquery控制元素的隐藏和显示的几种方法。 localStorage、sessionStorage用法总结 在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一) span<T>之高性能字符串操作实测
如何使用T-SQL备份还原数据库及c#如何调用执行? 准备材料:Microsoft SQL Server一部.需要还原的bak文件一只 一.备份 数据库备份语句:user master backup ...
- JavaScript数组去重的四种方法
今天,洗澡的想一个有趣的问题,使用js给数组去重,我想了四种方法,虽然今天的任务没有完成,5555: 不多说,po代码: //方法一:简单循环去重 Array.prototype.unique1 ...
随机推荐
- 深入理解jvm-2Edition-Java内存区域
1.运行时数据区域 Java虚拟机会将内存区域划分为几个区域,每个区域储存不同类型的数据或承担不同的功能. PC,堆-Java堆,栈-虚拟机栈.本地方法栈,方法区.直接内存. 当类被实例化或stati ...
- Build Puppet Clusters with Vagrant
$ cd ~/docs/propuppetex/chapter3 $ cat Vagrantfile Vagrant.configure(VAGRANTFILE_API_VERSION) do |co ...
- 适配Android4.4~Android11,调用系统相机,系统相册,系统图片裁剪,转换文件(对图片进行上传等操作)
前言 最近Android对于文件的许多方法进行了修改,网络上又没有对Android4到Android11关于系统相机.系统相册和系统裁剪的适配方案,我花了几天事件总结了一下,先上源码 DEMO源码 先 ...
- 使用 C# 下载文件的十八般武艺
文件下载是一个软件开发中的常见需求.本文从最简单的下载方式开始步步递进,讲述了文件下载过程中的常见问题并给出了解决方案.并展示了如何使用多线程提升 HTTP 的下载速度以及调用 aria2 实现非 H ...
- JVM的GC机制
JVM的GC机制 1. 什么对象会被回收 引用计数法:如果一个对象被引用一次,则记录引用次数加一,如果引用取消,则减一,当减到0时,需要被回收. 问题:循环引用,A引用B,B引用A,除此之外,已经无法 ...
- win7环境下配置JDK&&安装Weblogic12.2.1.4.0
win7环境下安装Weblogic12.2.1.4.0 写在前面 最近因为想复现一下weblogic的CVE-2020-2555和CVE-2020-2883漏洞,需要weblogic环境,但是vulh ...
- Django推导 安装等
HTTP协议补充 四大特性: 基于请求响应 基于TCP/IP协议之上的应用层协议 无状态 不能保存用户信息(cookie,session,token) 短链接 请求数据格式: 请求首行(请求方式,ht ...
- 理解SpingAOP
目录 什么是AOP? AOP术语 通知(Advice) 连接点(Join point) 切点(Pointcut) 连接点和切点的区别 切面(Aspect) 引入(Introduction) 织入(We ...
- Qt简单的解析Json数据例子(一)
要解析的json的格式为: { "rootpath": "001", "usernum": 111, "childdep" ...
- Json 文件 : 出现 Expected value at 1:0 问题的解决
只要找一个json在线解析,验证你的json文件格式的正确性,错误可以忽略. 如要消除红叉,关闭Json Validation即可,如下操作: