`
xbcoil
  • 浏览: 123386 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js数组操作(push,pop,shift,unshift,slice,splice,concat,sort)

 
阅读更多

本博客转自,http://www.cnblogs.com/fuyun2000/articles/1964144.html

 

js中针对数组操作的方法还是比较多的,今天突然想到来总结一下,也算是温故而知新吧。不过不会针对每个方法进行讲解,我只是选择其中的一些来讲。

首先来讲一下push和pop方法,这两个方法只会对数组从尾部进行压入或弹出,而且是在原数组进行操作,任何的改动都是会影响到操作的数组。push(args)可以每次压入多个元素,并返回更新后的数组长度。pop()函数每次只会弹出最后一个结尾的元素,并返回弹出的元素,如果是对空组数调用pop()则返回undefined。 如果参数是数组则是将整个数组当做一个元素压入到原来的数组当中。并不会产生类似concat合并数组时产生的“拆分现象”,下面看例子

例1:

var oldArr=[1,2,3];

alert(oldArr.push(4,[5,6]))-->5(这里只会将[5,6]当做一个元素来计算,返回更新后的数组长度5)

此时oldArr-->[1,2,3,4,[5,6]]

alert(oldArr.pop())-->[5,6](这里弹出最后一个元素[5,6],而不是6)

此时oldArr-->[1,2,3,4]

oldArr.pop()-->4

oldArr.pop()-->3

oldArr.pop()-->2

oldArr.pop()-->1

 oldArr.pop()-->undefined(空数组弹出)

现在讲完push和pop再来看一下unshift和shift

这两个方法都是通过对数组的头部进行的操作,其他基本跟push和pop类似,但是在IE中unshift方法返回的是undefined

 例2:

var oldArr2=[1,2];

oldArr2.unshift(3)-->undefined

此时oldArr2为-->[3,1,2]

oldArr2.shift()-->3

此时oldArr2为[1,2]

接下来看一下功能强大一点的splice,利用其可以进行数组随意位置的元素添加,删除 ,其操作也是在原有数组上修改

splice(start,deleteCnt,args) 中的start表示开始操作下标,deleteCnt表示从开始下标开始(包括该元素)要删除的元素个数,删除操作返回删除的元素。args表示用来替换删除掉的那些元素(可以有多个参数),start和deleteCnt必须为数字,如果不是数字尝试转换,转换失败当做0来处理。splice必须至少有一个start元素,否则不做任何操作。deleteCnt不存在表示删除start及后面的全部元素(IE下,取0不做删除)。start可以为负数,表示从数组右边结尾处开始计算。deleteCnt如果为负数不做删除,因为不可能删除负个元素。

好了解释就到这边现在看一下例子,通过例子或许可以更好的理解

例3:

var oldArr3=[1,2];

oldArr3.splice()-->""(返回空的字符串,不做任何操作,操作后oldArr3-->[1,2])

oldArr3.splice("")-->[1,2](""尝试转换为数字失败返回0,所以删除1,2,操作后oldArr3-->[],但是IE下有点恶心,不做任何操作)

oldArr3.splice("1a")-->同上

odlArr3.splice(0,2)-->[1,2]("从下标0的元素开始,删除两个元素1,2因此删除后oldArr3-->[])

oldArr3.splice(0,-1)-->""(从0下标开始删除-1个元素,故等于没做任何操作,操作后oldArr3-->[1,2])

oldArr3.splice(1,1)-->2(从下标1 开始删除1个元素,即删除2,所以删除后oldArr3-->[1])

oldArr3.splice(1,4)-->2(从下标1 开始删除4个元素,1开始只有1个元素,故删除2,所以删除后oldArr3-->[1])

oldArr3.splice(-1,0,3)-->""(从下标-1即2元素开始删除0个元素,然后添加元素3,所以操作后oldArr3-->[1,3,2])

oldArr3.splice(-1,1,3)-->2(从小标-1即2元素开始删除1个元素,然后添加元素3,操作后为oldArr3-->[1,3])

 

OK接下来开始讲concat,这个方法用来连接两个或多个数组,该数组不会改变原来的数组只会返回新的一个数组。连接的时候参数如果为数组,则连接的是数组中的元素。因为比较简单直接开始例子

例4:var oldArr4=[1,2];

oldArr4.concat(3,4)-->[1,2,3,4]

oldArr4.concat(3,4,[5,6])-->[1,2,3,4,5,6](这边添加的是[5,6]中的元素5和元素6)

oldArr4.concat(3,[4,[5,6]])-->[1,2,3,4,[5,6]](这边最里层的元素[5,6]整个用来添加,而不是拆开)

 

下面来讲数组中的排序方法sort

sort(function)是针对原数组进行的排序,不会生成新的数组。默认sort()不带参数时按照数组中的元素转换成字符串进行比较,比较的时候按照字符在字符编码中的顺序进行排序,每个字符都有一个唯一的编码与其对应。

且看下面例子

var oldArr5=[3,1,5,7,17] 看这个一般观念上以为对oldArr5排序时oldArr5.sort()会按照数字从小到大排序即返回[1,3,5,7,17],但是看一下结果其实不然返回的是[1,17,3,5,7] 因为比较的时候都被转成字符串。然后对字符串进行一个个的比较如果第一个字符相同则比较第二个,否则直接返回比较结果,因为"17"<"3"所以可想而知排序的结果就不是一般印象中的那个结果了。

sort(function)方法除了默认的无参外还可以传入自定义的排序方法,这样排序的结果完全可以由自己来控制了,想怎么排就怎么排,是不是很爽啊,呵呵。 一般自定义的function比较函数,包含两个参数分别代表用来比较的左元素和右元素。然后通过一定方式返回一个结果,如果返回值大于0表示交换左右元素,如果返回值小于0或等于0则表示不不会交换左右元素。现在来看一下例子

例5:

按照数字从大到小排列原有数组

var oldArr5=[3,1,5,7,17]; //初始数组

function mySort(left,right){

    if(left<right){

      return 1;}//如果左边元素小于右边元素则交换两数

    else{

      return -1;}//如果左边元素大于等于右边元素不做交换

}

当然上面的方法可以简化为funaction mySort(left,right){ return right-left;}

//按照偶数在前奇数在后排序

var oldArr6=[3,6,7,18];//初始数组

function mySort2(left,right){

   if(left%2==0)return -1;//如果左边元素为偶数则不交换

   if(right%2==0)return 1; //如果右边元素为偶数则交换

   return 0; //不交换

}

最后的slice不多讲,只是用来截取原数组中的部分元素,返回一个新的数组,原数组不会改变,其操作方式跟string的slice类似

var oldArr7=[1,2,3,4];

oldArr7.slice(0)-->[1,2,3,4]

oldArr7.slice(0,2)-->[1,2]

oldArr7.slice(0,0)-->[]

oldArr7.slice(0,-1)-->[1,2,3]

oldArr7.slice(-3,-1)-->[2,3]

oldArr4.slice(-1,-3)--[] 

分享到:
评论

相关推荐

    Javascript数组及类数组相关原理详解

    数组创建方式有两种 1. var arr = [] 2. var arr = new Array() 如果只有一个参数会指定...改变原数组 push pop shift unshift sort reverse splice 不改变原数组 concat join —&gt; split toString slice 比如 push 函数

    JavaScript数组操作函数汇总

    这里总结到的 js 数组操作函数有:push,pop,join,shift,unshift,slice,splice,concat (1)push 和 pop 这两个函数都是对数组从尾部进行压入或弹出操作。push(arg1,arg2,…)可以每次压入一个或多个元素,并...

    JavaScript类数组对象转换为数组对象的方法实例分析

    数组对象Array有很多方法:shift、unshift、splice、slice、concat、reverse、sort,ES6又新增了一些方法:forEach、isArray、indexOf、lastIndexOf、every、some、map、filter、reduce等。由于类数组不具有数组所...

    详解VUE 数组更新

    push  pop  unshift  shift  reverse  sort  splice (2)原数组未变,生成新数组 slice  concat  filter 对于使原数组变化的方法,可以直接更新视图。 对于原数组未变的方法,可以使用新数组替换原来的...

    JavaScript常用数组、字符串、Object方法

    JavaScript中常用的数组方法如下: - push():向数组末尾添加一个或多个元素,并返回新的长度。 - pop():删除并返回数组的最后一个元素。 - unshift():向数组开头添加一个或多个元素,并返回新的长度。 - ...

    JS array数组部分功能实现

    实现了一些比较常见的array功能,...concat find flat forEach & map includes join pop push reduce reverse shift slice some sort splice unshift 有些同质化比较高的就没有继续写了,不过逻辑应该都是差不多的。

    前端面试必问问题18道—一篇文章进大厂

    数组的splice,push,pop,unshift,shift,sort,reverse方法会改变原数组 类数组怎么转化为数组 什么是类数组,就是属性要为索引(数字)属性,同时又必须有一个length属性来控制对象边界的一个特殊对象,特点: 1...

    js数组方法大全(下)

    记录一下整理的js数组方法,免得每次要找方法都找不到。图片有点多,注意流量,嘻嘻! 本期分享 forEach() map() filer() every() some() reduce() reduceRight() indexOf() lastIndex() 上期分享 join() reverse() ...

    javascript中数组array及string的方法总结

    push、unshift方法,返回length。增加值得就返回length,其他返回该元素 pop,shift返回该元素 reverse返回该元素 splice(start,deleteCount,addItem…),从原数组中删除和增加,返回删除的数组 不会改变原来的数组,...

    JavaScript基础进阶之数组方法总结(推荐)

    6个增删数组元素的方法:pop()、push()、shift()、unshift()、slice()、splice() 2个数组排序方法:reverse()、sort() 连接数组的方法: 1、concat() 作用:连接两个数组,合并为一个新数组。 ...

    JScript内置对象Array中元素的删除方法

    Array对象除了提供了constructor、length和prototype外,还默认提供了13个方法:concat、join、pop、push、reverse、shift、slice、sort、splice、toLocaleString、toString 、unshift和valueOf,可是没有提供...

    javascript入门笔记

    Javascript,简称为 JS,是一款能够运行在 JS解释器/引擎 中的脚本语言 JS解释器/引擎 是JS的运行环境: 1、独立安装的JS解释器 - NodeJS 2、嵌入在浏览器中的JS解释器 JS的发展史: 1、1992年 Nombas 开发...

    JavaScript原生数组Array常用方法

    在入门Vue时, 列表渲染一节中提到数组的变异方法, 其中包括push(), pop(), shift(), unshift(), splice(), sort(), reverse(), 而concat()和slice()不属于变异方法. 在这里就复习一下Array所提供的这几个方法的使用

    javascript-layups

    Javascript布局-基础 一般很棒的方法 typeof THING返回typeof THING的数据类型(即“对象”,“字符串”,“数字”)。 请注意,typeof [1、2、3]将返回“对象”,因此您必须使用Array.isArray([1、2、3])。 弦乐 ...

    实例解析Array和String方法

    每一部分总结后有实例代码,代码中黄色框方法不改变原...操作:concat([多个项]) slice(起点[,终点]) splice(起点,个数[,多各项]) 位置:indexOf(项[,起点]) lastIndexOf(项[,起点]) ——迭代方法 参数: (functio

    编码挑战

    leetcode,hackerrank和过去的采访中的编码挑战。 每个都有自己的测试用例。...时间复杂度: .push() O(1).pop() O(1).shift() O(n).unshift() O(n).concat() O(n).slice() O(n).splice() O(n).sort()

    微软JavaScript手册

    concat 方法 (Array) 返回一个由两个数组合并组成的新数组。 concat 方法 (String) 返回一个包含给定的两个字符串连接的String 对象。 条件(三元)运算符 (?:) 根据条件执行两个表达式之一。 constructor ...

    javascript文档

    javascript的官方文档 这些方便实用的信息将帮助您了解 JScript 的各个部分。 在“字母顺序的关键字列表”中,可以找到按字母顺序列出的所有 JScript 语言的主题。如果只需要查看某个主题(例如对象),则有对该主题...

    JavaScript权威指南

    JavaScript权威指南 犀牛书 Chapter 1. Introduction to JavaScript Section 1.1. JavaScript Myths Section 1.2. Versions of JavaScript Section 1.3. Client-Side JavaScript Section 1.4. JavaScript ...

Global site tag (gtag.js) - Google Analytics