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. 获取数组最后一个元素且不改变数组的四种方法的更多相关文章

  1. 让一个图片在div中居中(四种方法)

    第一种方法: <div class="title"> <div class="flag"></div> <div cl ...

  2. js 获取数组最后一个元素

    当然有很多中做法 我这边就随便写几个最常用 最简单的方法把 # shift 删除数组第一个元素,并返回该元素,跟pop差不多 var a = ["aa","bb" ...

  3. 每天php函数 - 数组最后一个元素取出

    复制代码代码如下: $array=array(1,2,3,4,5);    echo $array[count($array)-1];//计算数组长度,然后获取数组最后一个元素,如果数组中最后一个元素 ...

  4. 数组最后一个元素的 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁

    数组最后一个元素$arr  = array( 1 ,  2 ,  3 ,  4 );foreach ( $arr  as & $value ) {     $value  =  $value  ...

  5. 【c语言】输入一个递增排序的数组的一个旋转,输出旋转数组中的最小元素

    //旋转数组的最小数字 //题目:把一个数组最開始的若干个元素搬到数组的末尾.我们称之为数组的旋转. //输入一个递增排序的数组的一个旋转.输出旋转数组中的最小元素. //比如:数组{3.4,5,1, ...

  6. 42.输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的。

    输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的. 这道题有很多烟雾弹: 首先如果有多对,最前面的两个数就是乘积最小的, ...

  7. PHP从数组中删除元素的四种方法实例

    PHP从数组中删除元素的四种方法实例 一.总结 一句话总结:unset(),array_splice(),array_diff(),array_diff_key() 二.PHP从数组中删除元素的四种方 ...

  8. 如何使用T-SQL备份还原数据库及c#如何调用执行? C#中索引器的作用和实现。 jquery控制元素的隐藏和显示的几种方法。 localStorage、sessionStorage用法总结 在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一) span<T>之高性能字符串操作实测

    如何使用T-SQL备份还原数据库及c#如何调用执行? 准备材料:Microsoft SQL Server一部.需要还原的bak文件一只 一.备份 数据库备份语句:user master backup ...

  9. JavaScript数组去重的四种方法

    今天,洗澡的想一个有趣的问题,使用js给数组去重,我想了四种方法,虽然今天的任务没有完成,5555: 不多说,po代码: //方法一:简单循环去重    Array.prototype.unique1 ...

随机推荐

  1. JAVA数组的基础入门>从零开始学java系列

    目录 JAVA数组的基础入门 什么是数组,什么情况下使用数组 数组的创建方式 获取数组的数据 数组的内存模型 为什么数组查询修改快,而增删慢? 查询快的原因 增删慢的原因 数组的两种遍历方式以及区别 ...

  2. Centos配置网络和主机映射

    目录 虚拟机网络的三种配置方式 配置虚拟机IP 主机映射问题 配置虚拟机的主机名 虚拟机远程登录 虚拟机网络的三种配置方式 桥接模式:当前虚拟机与主机在同一个局域网下,同一个局域网下的所有电脑都可以访 ...

  3. How to name a slf4j logger

    Use logger in a non-static context: Logger logger = LoggerFactory.getLogger(this.getClass().getName( ...

  4. sqli-labs lesson5-6 布尔盲注 报错注入 延时注入

    LESSON 5: 典型的布尔盲注. 盲注:sql注入过程中,sql语句的执行结果不回显到前端,这个时候就只能用一些别的方法进行判断或者尝试,这个判断或者尝试就叫做盲注.盲注又分为:1.基于布尔SQL ...

  5. MATLAB—M函数文件

    文章目录 一.M文件 1.脚本文件和函数文件的区别 二.M函数文件 1.创建方法 2.文件形式 2.函数形参及注释 3.函数的调用 4.函数变量 5.主函数.子函数 三.函数句柄 一.M文件 首先,要 ...

  6. CentOS7.6新增或修改SSH端口号的步骤

    1.修改SSH配置文件(注意是sshd_config而不是ssh_config,多了个d) vim /etc/ssh/sshd_config 找到"#Port 22",这一行直接键 ...

  7. mysql版本:'for the right syntax to use near 'identified by 'password' with grant option'

    查询mysql具体版本 SELECT @@VERSION 问题分析:mysql版本8.0.13,在给新用户授权时,发生了变化: 1064 - You have an error in your SQL ...

  8. Socket入门Demo

    一.简单介绍下Socket编程    申明:.net网络编程 1)什么是Socket编程? Socket编程就是常说的网络通讯编程,套接字编程.一般应用于软件聊天通讯,以及软件与硬件之间的通讯. 通熟 ...

  9. C# Monitor.Wait() 源码追踪 (转载)

    source: 释放对象上的锁并阻止当前线程,直到它重新获取该锁. 如果已用指定的超时时间间隔,则线程进入就绪队列. 可以在等待之前退出同步上下文的同步域,随后重新获取该域. [SecuritySaf ...

  10. 【springcloud】Eureka服务注册中心搭建

    转自:https://blog.csdn.net/pengjunlee/article/details/86538997 Spring Cloud是一系列框架的集合,它利用Spring Boot的开发 ...