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 ...
随机推荐
- Spring WebFlux 基础教程:参数校验
请求参数校验,在实际的应用中很常见,网上的文章大部分提供的使用注解的方式做参数校验.本文主要介绍 Spring Webflux Function Endpoint 使用 Spring Validati ...
- [.NET大牛之路 005] .NET 的执行模型
.NET大牛之路 • 王亮@精致码农 • 2021.07.06 前面我们介绍 .NET 历史时讲过,微软基于 .NET Framework 重新设计并创造了跨平台的 .NET Core,目前已经发展到 ...
- docker报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
docker报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon run ...
- kivy八种布局方式学习
kivy八种布局:FloatLayout.BoxLayout.AnchorLayout.GridLayout.PageLayout.RelativeLayout.ScatterLayout.Stack ...
- SVG和Canvas的区别?
什么是SVG? SVG(可缩放矢量图形)编辑可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准. 什么是 Canvas ...
- TCP可靠传输
1. TCP 可靠性如何保证? 信道可靠:用三次握手.四次挥手保证连接正确: 数据正确:分区编号.校验和.超时重传: 传输控制:流量控制.拥塞控制 2. 重传机制 TCP可靠传输方式是序列号与确认应答 ...
- 解决tomcat7中request会对中文重新编码,导致后台接收到为encode编码后参数问题
package xxx; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.ut ...
- SpringBoot开发三
需求介绍-SpringMVC 服务层的三层架构:表现层,业务层,数据层,浏览器访问服务器先访问表现层,期待表现层返回一些数据,表现层呢就访问业务层处理业务,而业务层在处理业务的时候会调用数据层请求数据 ...
- JacksonUtils
package com.intfish.resourceserver.util; import com.fasterxml.jackson.annotation.JsonInclude; import ...
- 启动Django报错:SyntaxError: Generator expression must be parenthesized 解决办法
这是因为版本不兼容所导致的. 此错误已知与Python问题#32012相关.基于Django 1.11.16及以下的项目将在Python 3.7启动时引发此异常.此问题的补丁已合并到Django 2. ...