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
})

ES5 数组拓展

ES5为Array做了大幅拓展

.indexOf / .lastIndexof

该方法用于查找数组内指定元素的位置,查到第一个之后返回其索引,没有找到则返回-1。lastIndexOf反向搜索,查到第一之后,返回其索引,但顺序还是取正序。

var arr = [2,3,4,"root","evenyao",3,8,7]
console.log(arr.indexOf(3)) //1
console.log(arr.indexOf(11)) //-1
console.log(arr.lastIndexof(3)) //5

forEach

遍历数组,参数为一个回调函数,回调函数有三个参数

  1. 当前元素 value
  2. 当前元素索引值 i
  3. 整个数组 array
var arr = [1,2,3,4,5,6]

arr.forEach(function(value,i,array){
array[i]= value + 1
}) console.log(arr); //[2, 3, 4, 5, 6, 7]
var arr  = [3,4,"evenyao"]
arr.forEach(function(value,index){
console.log('' + value+value)
}) //33
//44
//evenyaoevenyao

map

遍历数组,回调函数。返回值做操作之后组成一个新数组返回,新数组索引结构和原数组一致,原数组不变

var arr = [1,2,3,4,5,6]
var arr2 = arr.map(function(val){
return val * val
}) console.log(arr) //[1, 2, 3, 4, 5, 6]
console.log(arr2) //[1, 4, 9, 16, 25, 36]

every、some

逻辑判定,回调函数返回一个布尔值

  • every是所有函数的每个回调函数都返回true,才返回true,遇到false就终止执行,返回false
var arr = [1,2,-1,0,5]
arr.every(function(val){
return val>0
}) //false
 
 
 
var arr = [1,2,1,3,5]
arr.every(function(val){
return val>0
}) //true
 
 
  • some是存在有一个回调函数返回true就终止执行并返回true,否则返回false
var arr = [1,2,-1,0,5]
arr.some(function(val){
return val>0
}) //true

filter

返回数组的一个子集,回调函数用于逻辑判断是否返回,返回true则把当前元素加入到返回数组中,false则不加。新数组只包含返回true的值,原数组保持不变。

var arr = [3,5,6,-1,-2,-3]
var arr2 = arr.filter(function(val){
return val > 0
}) console.log(arr) //[3, 5, 6, -1, -2, -3]
console.log(arr2) //[3, 5, 6]

其他案例:

var users = [
{ name: "John", age: 15 },
{ name: "Pete", age: 19 },
{ name: "Ann", age: 12 }
] //筛选age > 18的用户
var age18 = users.filter(function(user){
return user.age > 18
})
console.log(age18)
 
 
 
var users = [
{ name: "John", age: 15 },
{ name: "Pete", age: 19 },
{ name: "Ann", age: 12 }
] //筛选姓名中含有'n'的用户
var namehasn = users.filter(function(user){
return user.name.indexOf('n')>-1
})
console.log(namehasn)
 

reduce

遍历数组,调用回调函数,将数组元素组合成一个值,不影响原数组

  1. 回调函数:把两个值合为一个,返回结果
  2. value,一个初始值,可选
var arr = [3,4,5]
arr.reduce(function(v1,v2){
return v1 + v2
}) //12
arr.reduce(function(v1,v2){
return v1 * v2
}) //60 //含value初始值
arr.reduce(function(v1,v2){
return v1 + v2
},10) //22
arr.reduce(function(v1,v2){
return v1 * v2
},10) //600
 

参考链接

 

JavaScript 数组操作方法 和 ES5数组拓展的更多相关文章

  1. ES6数组去重及ES5数组去重方法

    ES6中新增了Set数据结构,类似于数组,但是 它的成员都是唯一的 ,其构造函数可以接受一个数组作为参数,如: let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3]; ...

  2. 数组去重----es6&es5&数组对象去重

    es6方法: 普通数组: 1.使用Array.from(new Set(arr)); /* * @param oldArr 带有重复项的旧数组 * @param newArr 去除重复项之后的新数组 ...

  3. JavaScript中的常用的数组操作方法

    JavaScript中的常用的数组操作方法 一.concat() concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅会返回被连接数组的一个副本. var arr1 = [1,2 ...

  4. JavaScript常用数组操作方法,包含ES6方法

    一.concat() concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅会返回被连接数组的一个副本. var arr1 = [1,2,3]; var arr2 = [4,5]; ...

  5. 数组操作方法(包括es5)

    //push(); 定义:可以可向数组的末尾添加一个或更多元素,并返回新的长度. 方法:push(); 语法:数组.push(新元素1,新元素2,....,新元素x) 返回值:把指定的值添加到数组后的 ...

  6. JavaScript中的内置对象-8--1.Array(数组)-Array构造函数; 数组的栈方法; 数组的转换方法; 数组的操作方法; 删除-插入-替换数组项; ECMAScript为数组实例添加的两个位置方法;

    JavaScript内置对象-1Array(数组) 学习目标 1.掌握任何创建数组 2.掌握数值元素的读和写 3.掌握数组的length属性 如何创建数组 创建数组的基本方式有两种: 1.使用Arra ...

  7. Javascript数组操作方法

    1.shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] ...

  8. javaScript之数组操作方法(一)

    本篇文章主要总结了几个简单的数组操作方法.数组就是一组数据的集合,接下来我们就了解一下几种数组的操作方法. 1. join方法:把数组的所有元素放入一个字符串.举例如下: var arrJoin=[& ...

  9. 技巧收藏|10个JavaScript常用数组操作方法

    摘要:这篇文章,向大家展示了在日常开发中,数组有哪些小技巧值得借鉴和学习. 在web前端开发第二阶段Javascript中,数组是一个重要且常见的知识点,我们经常将数据存储在数组中,遍历数组或替换数组 ...

随机推荐

  1. WPF引用ActiveX提示没有注册类或不是有效的Win32程序

    VS2017开发WPF时,需要引用UKey组件读取插入的Ukey编号和密钥 该组件在网页端调用时使用ObjectId进行ActiveX注册即可,后来做成WPF客户端进行读取遇到该问题. 解决: 右键项 ...

  2. 在spring添加注解时,第一行package报错configure build path

    练习spring的ioc的注解的时候写上注解就会在第一行package报错configure build path. 用的spring4.2.4的jar包.经过上网查阅资料,可能是jar包冲突,解决办 ...

  3. 来看看Uber的司机支持服务签到及预约系统的架构设计思路

    Uber的Greenlight Hubs(GLH)在全球拥有超过700个分支机构,为合作车主提供从账户和支付到车辆检查和车主注册等各方面的人工支持.为了给合作车主创造更好的体验并提高客户满意度,Ube ...

  4. 协议类接口 - LCD

    一.引脚含义 下图为某LCD相关引脚: 从引脚可以大概看出其SoC的连接情况: 1)VCLK为时钟,每一次像素就移动一次 2)HSYNC/VLINE 3)VSYNC/VFRAME 4)VD0 - VD ...

  5. android软件开发之TextView控件常用属性

    TextView控件 text属性,设置显示的文本 textColor:设置文本颜色 textSize:设置文本字体大小 autoLink:设置文本为电话,URL连接等的时候是否显示为可点击的链接 c ...

  6. react-router 4.0版本使用笔记

    react-router 4变化还是挺大的,看网上很多人遇到问题,都是基本用法的改变,所以这里记录一下. http://www.jianshu.com/p/d6727e8d81c4 1.react-r ...

  7. STM32JTAG口用作普通IO的配置

    使用Jlink向STM32烧录程序时,需要使用6个芯片的引脚(以STM32F103C8T6为例),分别是PB4/JNTRST.PB3/JTDO.PA13/JTMS.PA14/JTCK.PA15/JTD ...

  8. 自定义view实现圆角图片

    前两天想实现一个圆角图片的效果,通过网络搜索后找到一些答案.这里自己再记录一下,加深一下自己的认识和知识理解. 实现圆角图片的思路是自定义一个ImageView,然后通过Ondraw()重绘的功能,将 ...

  9. HDOJ:6333-Problem B. Harvest of Apples(组合数学+莫队算法+逆元)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6333 解题心得: 这个题可以说是十分精彩了,首先推组合数学的公式,其中一个很重要的公式是Cnm = C ...

  10. python中自定义超时异常的几种方法

    最近在项目中调用第三方接口时候,经常会出现请求超时的情况,或者参数的问题导致调用异代码异常.针对超时异常,查询了python 相关文档,没有并发现完善的包来根据用户自定义的时间来抛出超时异常的模块.所 ...