JavaScript中数组有各类操做方法,如下经过举例来讲明各类方法的使用:javascript
在数组最后添加一个元素php
var arr=[3,4,5,6] console.log(arr) //[3, 4, 5, 6] arr.push("evenyao") //字符串须要加"",数字不加 console.log(arr) //[3, 4, 5, 6, "evenyao"]
把数组最后一位取出来,并返回,且原来数组发生变化html
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]
把数组第一位取出来,并返回,且原来数组发生变化java
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"]
在数组第一位新增一个元素json
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"]
把数组元素使用参数做为链接符,连接成字符串,不会修改原数组的内容数组
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方法用于一次性解决数组添加、删除(这两种方法一结合就能够达到替换效果),方法有三个参数函数
1.开始索引
2.删除元素的位移
3.插入的新元素,固然也能够写多个post
使用splice完成删除ui
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完成新增url
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"]
取出元素(区间)可做为新数组。但不同的是原数组不发生变化
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]
将数组逆序,会修改原数组
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]
用于拼接数组,但不会修改任何一个原始数组,也不会递归连接数组内部数组
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
用于对数组进行排序,会改变原数组
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为Array作了大幅拓展
该方法用于查找数组内指定元素的位置,查到第一个以后返回其索引,没有找到则返回-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
遍历数组,参数为一个回调函数,回调函数有三个参数
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
遍历数组,回调函数。返回值作操做以后组成一个新数组返回,新数组索引结构和原数组一致,原数组不变
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]
逻辑断定,回调函数返回一个布尔值
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
var arr = [1,2,-1,0,5] arr.some(function(val){ return val>0 }) //true
返回数组的一个子集,回调函数用于逻辑判断是否返回,返回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)
遍历数组,调用回调函数,将数组元素组合成一个值,不影响原数组
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