浅谈JavaScript数组操作方法

JavaScript中数组有各种操作方法,以下通过举例来说明各种方法的使用:

push

在数组最后添加一个元素

var arr=[3,4,5,6]
console.log(arr)   //[3, 4, 5, 6]

arr.push("evenyao")  //字符串需要加"",数字不加
console.log(arr)   //[3, 4, 5, 6, "evenyao"]

pop

把数组最后一位取出来,并返回,且原来数组发生变化

var arr=[3, 4, 5, 6, "evenyao"]
console.log(arr)   //[3, 4, 5, 6, "evenyao"]

var value = arr.pop()   //arr.pop()的返回值就是取出的值,但这里是undefined是因为前面有var value
console.log(value)  //"evenyao"
console.log(arr)   //[3, 4, 5, 6]

shift

把数组第一位取出来,并返回,且原来数组发生变化

var arr=["root",3, 4, 5, 6, "evenyao"]
console.log(arr)   //["root",3, 4, 5, 6, "evenyao"]

var value = arr.shift()
console.log(value)  //"root"
console.log(arr)  //[3, 4, 5, 6, "evenyao"]

unshift

在数组第一位新增一个元素

var arr=[3, 4, 5, 6, "evenyao"]
console.log(arr)   //[3, 4, 5, 6, "evenyao"]

arr.unshift("root")  //字符串需要加"",数字不加
console.log(arr)   //["root",3, 4, 5, 6, "evenyao"]

join

把数组元素使用参数作为连接符,链接成字符串,不会修改原数组的内容

var arr=[3, 4, 5, 6, "evenyao"]
console.log(arr.join(‘-‘))   //3-4-5-6-evenyao
console.log(arr)   //[3, 4, 5, 6, "evenyao"]

splice

splice方法用于一次性解决数组添加、删除(这两种方法一结合就可以达到替换效果),方法有三个参数

1.开始索引
2.删除元素的位移
3.插入的新元素,当然也可以写多个

使用splice完成删除

var arr=[3, 4, 5, 6, "evenyao"]
var arr2 = arr.splice(1,2)   //从下标为1的元素开始,取出2个元素作为一个数组的返回,原数组发生改变

console.log(arr)  //[3, 6, "evenyao"]
console.log(arr2)  //[4, 5]

使用splice完成新增

var arr=[3, 4, 5, 6, "evenyao"]
arr.splice(1,0,8,9,"yes")   //从下标为1的位置(元素4)开始,删除0个,新增三个元素(8,9,"yes"),位置在(元素4)之前

console.log(arr)   //[3, 8, 9, "yes", 4, 5, 6, "evenyao"]

slice

取出元素(区间)可作为新数组。但不一样的是原数组不发生变化

var arr=[3, 4, 5, 6, "evenyao"]
var arr2 = arr.slice(2,3)  //从arr下标为2开始,到下标为3结束(不包括3,即只取了一个),作为新数组,原数组不变

console.log(arr)   //[3, 4, 5, 6, "evenyao"]
console.log(arr2)   //[5]

reverse

将数组逆序,会修改原数组

var arr=[3, 4, 5, 6, "evenyao"]
console.log(arr)   //[3, 4, 5, 6, "evenyao"]

arr.reverse()
console.log(arr)  //["evenyao", 6, 5, 4, 3]

concat

用于拼接数组,但不会修改任何一个原始数组,也不会递归链接数组内部数组

var a = [1,2,3,4,5];
var b = [6,7,8,9];
console.log(a.concat(b));//[1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(a); //[1, 2, 3, 4, 5]
console.log(b); //[6, 7, 8, 9]

也因为不会改变任何一个原始数组,因此可以用concat来进行数组的深拷贝,即:

var arr=[3, 4, 5, 6, "evenyao"]
var arr2 = arr.concat([])   //相当于和一个空数组进行了拼接,然后生成了arr2看上去和arr一模一样,但是却是两块不一样的内存空间

console.log(arr)   //[3, 4, 5, 6, "evenyao"]
console.log(arr2)   //[3, 4, 5, 6, "evenyao"]
arr === arr2   //false

sort

用于对数组进行排序,会改变原数组

var arr=[5,4,3,2,1]
arr.sort()
console.log(arr) //[1, 2, 3, 4, 5]

但是有一些情况下情况下会变成下面这样:

var arr=[7,8,9,10,11]
arr.sort()
console.log(arr) //[10, 11, 7, 8, 9]

因为按照字母表排序,7比10大,这时候我们需要传入自定义排序函数

var arr = [7,8,9,10,11]

arr.sort(function(v1,v2){
       return v1-v2
})
console.log(arr) //[7, 8, 9, 10, 11]

其他案例:

    var users = [
        {
            name: ‘aaa‘,
            age: 21
        },
        {
            name: ‘baa‘,
            age: 18
        },
        {
            name: ‘abc‘,
            age: 24
        }
    ]

    // 按age 从小到大排序
    var sortByAge = users.sort(function(v1, v2){
        return  v1.age > v2.age
    })

  // 按name从大到小排序
    var sortByName = users.sort(function(v1, v2){
        return  v1.name > v2.name
    })

原文地址:https://www.cnblogs.com/evenyao/p/9346198.html

时间: 2024-10-05 06:43:59

浅谈JavaScript数组操作方法的相关文章

浅谈Javascript数组的使用

数组的大小 js数组可以动态调整大小,更确切点说,它没有数组越界的概念,a[a.length]没什么问题.比如声明一个数组a = [1, 3, 5],现在的数组大小是3,最后一个元素的索引是2,但是你依然可以使用a[3],访问a[3]返回的是undefined,给a[3]赋值:a[3] = 7,是给数组a添加了一个元素,现在数组a的长度是4了.你可以试试把下面这段代码放到浏览器里运行下: var a = []; for(int i = 0; i <= a.length; i++) { a[a.l

《浅谈JavaScript系列》系列技术文章整理收藏

<浅谈JavaScript系列>系列技术文章整理收藏 1浅谈JavaScript中面向对象技术的模拟 2浅谈javascript函数劫持[转自xfocus]第1/3页 3浅谈javascript 面向对象编程 4老鱼 浅谈javascript面向对象编程 5浅谈javascript的数据类型检测 6浅谈Javascript嵌套函数及闭包 7根据一段代码浅谈Javascript闭包 8浅谈JavaScript编程语言的编码规范 9浅谈Javascript面向对象编程 10浅谈JavaScript

浅谈 JavaScript 编程语言的编码规范

对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦.软件存在的长期价值直接与编码的质量成比例.编码规范能帮助我们降低编程中不必要的麻烦.而 JavaScript 代码是直接发送给客户浏览器的,直接与客户见面,编码的质量更应该受到关注. 本文浅谈 JavaScript 编程中关

浅谈javascript继承【读javascript设计模式第四章节继承有感】

javascript继承,无任是类式继承,原型式继承还是渗元式继承都是通过不同方法去围绕着prototype转,简单分析下三种不同继承方法是如何围绕prototype转的 一:类似继承,先上关键代码 function extend(subClass,supClass){ var fn = function(){}; fn.prototype = supClass.prototype; subClass.prototype = new fn(); subClass.prototype.constr

浅谈javascript函数劫持

http://www.xfocus.net/articles/200712/963.html 浅谈javascript函数劫持 文章提交:hkluoluo (luoluonet_at_hotmail.com) by luoluo on 2007-11-30 luoluonet_at_yahoo.cn http://www.ph4nt0m.org 一.概述 javascript函数劫持,也就是老外提到的javascript hijacking技术.最早还是和剑心同学讨论问题时偶然看到的一段代码,大

浅谈javascript单体【读javascript设计模式第五章节单体有感】

单体,整个运行环境就独有一份,最简单的一种单体就是一个把所有属性和方法都集中在一起的对象,区别于一般的字面量对象,一般字面量对象是对一个物体的描述,集合该物体所具有的一些属性和方法,而单体则包含更多的些逻辑在里面,单体的好处有,划分命名空间,如果用来作为网页包装器,可以使得页面所有变量都封装在一个对象里,大幅度减小网页里的全局变量, 代码如: common.js (function(wz){ $.extend({ init:function(){ var self = this; this.bi

浅谈JavaScript中的原型模式

在JavaScript中创建对象由很多种方式,如工厂模式.构造函数模式.原型模式等: <pre name="code" class="html">//工厂模式 function createPerson(name,age,job) { var o = new Object; o.name = name; o.age = age; o.job = job; o.sayName = function() { alert(this.name); } retur

浅谈javascript的原型及原型链

浅谈javascript的原型及原型链 这里,我们列出原型的几个概念,如下: prototype属性 [[prototype]] __proto__ prototype属性 只要创建了一个函数,就会为该函数创建一个prototype属性,指向该函数的原型对象.实例对象是不会拥有该属性的.默认情况下,该原型对象也会获得一个constructor属性,该属性包含一个指针,指向prototype属性所在的函数. Person.prototype.constructor===Person [[proto

浅谈JavaScript运行机制

浅谈JavaScript运行机制 ? 想要了解一门语言,最好的办法就是了解它的运行机制.掌握了运行机制,能够让我们在开发中少走许多弯路,写出高质量的代码.本文简单介绍什么是JavaScript的运行机制,给刚刚接触JavaScript的小白一个初步的了解,为将来打好基础. 一.JavaScript 代码运行分两个阶段: 1.预解析---把所有的函数定义提前,所有的变量声明提前,变量的赋值不提前 2.执行---从上到下执行(按照js运行机制) 二.JavaScript运行机制的特点 1.JavaS