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. 微信小程序测试点

    一.测试范围 1.权限测试 需要检查以下几种情况下微信用户访问的权限 1)未授权微信登录小程序 未授权时,一般使用一些业务功能的时候,都会弹出提醒:先授权再操作对应功能.or在提交数据到后台的时候,会 ...

  2. CSS Grid 布局(Grid Layout)完全指南 #flight.Archives003

    Title/ CSS Grid 布局(Grid Layout)完全指南 #flight.Archives003 序 : 写完这篇文章后,我准备一直做下去了,包括flight的各个分区,也看到前方的路. ...

  3. Java多线程间的数据共享

    下面的程序演示了一个对象被两个线程访问的方法,"monitor.gotMessage();"这一句虽然是monitor对象的方法,但却是运行在"MyObject" ...

  4. 【XSS-labs】level 16-20

    Level 16 查看源码:发现 空格 / 和script都被转义了. 用img标签的onerror事件(在加载外部文档或图片出错后触发),空格用%0a绕过,  payload如下: <img% ...

  5. SQL 练习29

    查询课程名称为「数学」,且分数低于 60 的学生姓名和分数 SELECT Student.Sname,Course.Cname,SC.score FROM Student,Course,SC WHER ...

  6. Java线程池中submit()和execute()方法有什么区别

    两个方法都可以向线程池提交任务,execute()方法的返回类型是void,它定义在Executor接口中,而submit()方法返回有计算结构的Future对象,它定义在ExecutorServic ...

  7. 测试框架unit之assertion断言使用详解

    NUnit是.Net平台的测试框架,广泛用于.Net平台的单元测试和回归测试中,下面我们用示例详细学习一下他的使用方法 任何xUnit工具都使用断言进行条件的判断,NUnit自然也不例外,与其它的xU ...

  8. WPF日积月累之DataGrid样式以及操作数据模板中的控件

    一.效果图 二.代码预览 1 <Window x:Class="Test.MainWindow" 2 xmlns="http://schemas.microsoft ...

  9. ThreadLocal, volatile, synchronized, map, epoll, AQS简单总结

    ThreadLocal ThreadLocal主要是为了解决内存泄漏的问题,它是一种弱引用: 引用总共有四种,,我简单列一下: 强引用(Strong Reference):正常引用,根据垃圾回收算法, ...

  10. Mybatis--级联(一)

    级联是resultMap中的配置. 级联分为3种 鉴别器(discrimination):根据某些条件采用具体实现具体实现类级联,如体检表根据性别去区分 一对一:学生和学生证 一对多:班主任和学生. ...