新增元素

js中给数组新增元素主要通过2个方法 push 和 unshift

Array.prototype.push

功能概述

push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度(该方法修改原有数组)。

语法

arr.push(element1, ..., elementN)

关注点

新增的元素出现在数组的末尾

可以一次性添加多个元素

返回值是数组的最新长度

代码示例

简单使用

let arr = [1,2];

let newLength = arr.push(3,4);

console.log(newLength)// newLength: 4

对比通过脚本添加和ES6析构的方式添加性能对比

function push() {

let arr = [1,2];

let newLength = arr.push(3,4);

}

function add() {

let arr = [1,2];

let len = arr.length;

arr[len] = 3;

arr[len+1] = 4;

}

function es6() {

let arr = [1,2];

arr = [

...arr,

3,

4

]

}

let sum = 1000000;//1百万次

console.time('push')

for (let index = 0; index < sum; index++) {

push();

}

console.timeEnd('push');

console.time('add')

for (let index = 0; index < sum; index++) {

add();

}

console.timeEnd('add')

console.time('es6')

for (let index = 0; index < sum; index++) {

es6();

}

console.timeEnd('es6')

输出的结果

push: 470.538818359375ms

add: 454.7177734375ms

es6: 2625.546142578125ms

结论

push 和 通过角标去添加元素性能接近,而es6的析构会慢很多;原因是 es6的析构可以等效如下代码

let arr = [1,2];

arr = [...arr,4,5]; //1

arr = arr.concat(4,5); //2

Array.prototype.unshift

功能概述

unshift()方法将一个或多个元素添加到数组的开头,并返回该数组的新长度(该方法修改原有数组)

语法

arr.unshift(element1,...,elementN)

关注点

新增单个或者多个元素到数组的头部

如果是多个元素,会以块的方式添加到数组头部,也就是说会保持参数的原有顺序

函数返回新数组的长度

代码示例

简单使用

let arr = [1,2];

let newLength = arr.unshift(10);

console.log(newLength);// 3,新数组长度

区分一次添加多个元素和循环添加

let arr = [1,2];

arr.unshift(3,4,5);

console.log(arr); //#1

let arrMap = [1,2];

let add = [3,4,5];

add.map(val=>{

arrMap.unshift(val);

})

console.log(arrMap);//#2

第一处的输出和第二处的输出结果是不一样

删除元素

数组中提供了2个删除元素的方法分别是pop()和shift();和新增元素一样,一个是从末尾删除一个是从头部删除

Array.prototype.pop

功能概述

pop()方法从数组中删除最后一个元素,并返回该元素的值(此方法更改数组的长度)。

语法

arr.pop()

关注点

从元素末尾删除

返回被删除的元素

如果数组是空,返回的元素是 undefined

代码示例

let arr = [1,2];

let delEle = arr.pop();

console.log(delEle);// 2

console.log(arr); // [1];

Array.prototype.shift

功能概述

shift() 方法从数组中删除第一个元素,并返回该元素的值(此方法更改数组的长度)。

语法

arr.shift()

关注点

从数组头部开始删除元素

返回删除元素的本身

如果数组是空,返回的元素是 undefined

实现数据结构中的栈和队列

数据结构(栈)

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素

代码实现

从概念描述来说,我们只需要满足 先进后出(后进先出)这个特性就可以了;所以如果我们入栈的时候是在数组的末尾,那么出栈的时候也得从末尾开始,如果入栈的时候是数组的头部那么出栈的时候也对在数组的头部

从数组末尾入栈

function Stack(initData){

this.data = initData || [];

}

// 入栈

Stack.prototype.in = function (element) {

return this.data.push(element);

}

// 出栈

Stack.prototype.out = function(){

return this.data.pop();

}

从数组头部入栈

function Stack(initData){

this.data = initData || [];

}

// 入栈

Stack.prototype.in = function (element) {

return this.data.unshift(element);

}

// 出栈

Stack.prototype.out = function(){

return this.data.shift();

}

数据结构(队列)

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

代码实现

和栈一样,我们可以把数组的任意一头作为队列的 前端;

把数组的头部当作前端,那么数组的末尾就是后端,也就是删除元素得在数组的头部,而新增元素就在数组的尾部

// 使用 shift 和 push 实现

function Queue(initData){

this.data = initData || [];

}

// 添加

Queue.prototype.in = function (element) {

return this.data.pop(element);

}

// 删除

Queue.prototype.out = function(){

return this.data.shift();

}

总结

push,pop,unshift,shift这4个函数是数组提供的对数组内元素进行新增和删除;在日常开发中组合使用能够帮助我们快速实现很多功能,在结合vue和angular这些框架使用的时候,需要注意他们的双向数据绑定对数组的限制

js数组再倒数第二个添加元素_归纳JS中数组的使用(一)元素新增和删除相关推荐

  1. js数组再倒数第二个添加元素_【JS】JS数组添加元素的三种方法

    正文 1.push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 1).语法: arrayObject.push(newelement1,newelement2,....,newelem ...

  2. wlansetprofile 倒数第二个参数_西部世界 | 脚本参数的演变

    作者:Todd Weller Cross I.T. 高级数据系统架构师 Todd Weller 是位于美国宾夕法尼亚州格林维尔的 FileMaker 商业联盟白金合作伙伴 Cross I.T. 的高级 ...

  3. python 矩阵元素赋值_对numpy中数组元素的统一赋值实例

    Numpy中的数组整体处理赋值操作一直让我有点迷糊,很多时候理解的不深入.今天单独列写相关的知识点,进行总结一下. 先看两个代码片小例子: 例子1: In [2]: arr =np.empty((8, ...

  4. python数组切片赋值_基于numpy中数组元素的切片复制方法

    代码1: #!/usr/bin/python import numpy as np arr1 = np.arange(10) print(arr1) slice_data = arr1[3:5] pr ...

  5. python数组元素赋值_对numpy中数组元素的统一赋值实例

    下面小编就为大家分享一篇对numpy中数组元素的统一赋值实例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 Numpy中的数组整体处理赋值操作一直让我有点迷糊,很多时候理解的不深入. ...

  6. python n个list如何组成矩阵_有序矩阵中第K小的元素amp;x的平方根(二分法篇)

    69. x的平方根 题目描述: 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例1: ...

  7. js 数组遍历符合条件跳出循环体_在JavaScript中循环遍历数组

    你有几个选择: 1.顺序for循环: var myStringArray = ["Hello","World"]; var arrayLength = mySt ...

  8. indexof方法_[ 翻译 ] ES6中数组去重的三种方法

    原文:How to Remove Array Duplicates in ES6 翻译:Hytonight云息 有三种方法可以过滤掉一个数组的重复元素并且返回去重后的新数组.我最喜欢使用Set,因为它 ...

  9. js轮播图片小圆点变化_原生js实现轮播图(两种方法)

    第一种: 这个是之前写的,比较草率,没有注释,如果这个看不懂就去看第二个,比较仔细,主要是了解他,后面都会有一些插件来使用,很方便,只要几行代码就可写出各种各样的代码,所以,不懂的话,不要太在意, 第 ...

最新文章

  1. 动态规划:求最大公共子串
  2. tf17: “声音大挪移”
  3. firefox是什么浏览器_我为什么不使用Firefox(火狐)浏览器
  4. maven整合S2SH
  5. 源码WIFI--扫描和连接
  6. java数据类型划分_一张图搞定java数据类型的划分
  7. execjs执行js出现window对象未定义时的解决_10个常见的JS语言错误总汇
  8. mysql内部参数是什么意思_mysql参数及解释
  9. myfunc matlab,为matlab匿名函数设置’help’
  10. SQL Server 2017 AlwaysOn AG 自动初始化(七)
  11. 免费python全套教程-0基础学python 全套教程送你参考
  12. 小波变换和motion信号处理(二)
  13. 【图像增强】基于matlab GSA灰度图像增强【含Matlab源码 1172期】
  14. mysql中文模糊查询_解决mysql中文模糊查询问题的方法
  15. BCDboot.exe
  16. 全文六万字《计算智能》智能优化算法 张军【Python】
  17. 清除显卡右键菜单批处理.bat
  18. 几种方式加速网页视频播放速度
  19. CUDA+ GTX1050ti电脑配置
  20. Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划

热门文章

  1. lock mysql unlock_MySQL中的lock tables和unlock tables
  2. 在计算机网络系统的远程通信中,在计算机网络系统的远程通信中,通常采用的传输技术是...
  3. 计算机二级web题目(3)--HTML基础
  4. 怎样学c++程序语言,如何学好 C++——学习门槛最高的编程语言
  5. jwt配置 restful_SpringBoot实现JWT保护前后端分离RESTful API
  6. laravel API开发,使用dingo/api
  7. 记录一次Oracle注入绕waf
  8. 引用:初探Sql Server 执行计划及Sql查询优化
  9. 结构型模式 适配器模式
  10. 《Effective Java》读书笔记 - 5.泛型