javascript数组常用方法!

来源:互联网 发布:网络财经编辑招聘 编辑:程序博客网 时间:2024/05/21 21:42

简介:
数组总共有22种方法,本文将其分为对象继承方法、数组转换方法、栈和队列方法、数组排序方法、数组拼接方法、创建子数组方法、数组删改方法、数组位置方法、数组归并方法和数组迭代方法共10类来进行详细介绍,在工作中非常有用!!!
一、对象继承方法:数组是一种特殊的对象,继承了对象Object的toString()、toLocaleString()和valueOf()方法 **
1.【toString()】**toString()方法返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串— [注意]—该方法的返回值与不使用任何参数调用join()方法返回的字符串相同

[1,2,3].toString() // ‘1,2,3’
[‘a’,’b’,’c’].toString() // ‘a,b,c’
[1,[2,’c’]].toString() // “1,2,c”

2.【toLocaleString()】**toLocaleString()是toString()方法的本地化版本,它经常也会返回与toString()方法相同的值,但也不总是如此。因为,它调用元素的是toLocaleString()方法将每个数组元素转化为字符串

var person1 = {  toLocaleString:function(){    return 'nike';  },  toString:function() {    return 'join'  }};var person2 = {  toLocaleString:function() {    return 'goggle';  },  toString:function() {    return 'souhu'  }}var people = [person1,person2]console.log(people.toString())   //  "join,souhu"console.log(people.toLocaleString())  //  "nike,goggle"var s = people.toString()console.log(s.split())  //  ["join,souhu"]
  1. 如果数组中的某一项的值是null或者undefined,则该值在toLocaleString()和toString()方法返回的结果中以空字符串表示
var arr = [1,undefined,2,null,3]arr.toString()   //"1,,2,,3"
  1. 【valueOf()】**valueOf()方法返回数组对象本身
var a = [1,2,3]a.valueOf()  // [1, 2, 3]console.log(a.valueOf() instanceof Array)  //true

二、 数组转换方法
1.【join()】**Array.join()方法是String.split()方法的逆向操作,后者是将字符串分割成若干块来创建一个数组 数组继承的toLocaleString()和toString()方法,在默认情况下都会以逗号分隔的字符形式返回数组项;而join()方法可以使用不同的分隔符来构建这个字符串,join()方法只接收一个参数,用作分隔符的字符串,然后返回包含所有数组项的字符串 如果不给join()方法传入任何值,则使用逗号作为分隔符

var arr = [1,2,3]arr.join()  // "1,2,3"arr.join('')  // "123"arr.join(' ')  // "1 2 3"var b = new Array(10);b.join()  // ",,,,,,,,,"

2.如果数组中的某一项的值是null或者undefined,则该值在join()方法返回的结果中以空字符串表示

var b = [1,undefined,2,null,3]b.join()  // "1,,2,,3"

3.该方法也可以用于类数组对象上

Array.prototype.join.call('hello', '-')  // "h-e-l-l-o"Array.prototype.join.call(obj,'-')   //  "a-b"
  1. 若对象没有length属性,就不是类数组,也就不能调用数组的方法
var obj = {0:'a',1:'b'}Array.prototype.join.call(obj,'-')   // ""

三、栈和队列方法
push()和pop()方法允许将数组当作栈来使用。unshift()和shift()方法的行为非常类似于push()和pop(),不一样的是前者是在数组的头部而非尾部进行元素的插入和删除操作

栈是一种LIFO(Last-First-Out,后进先出)的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(叫做推入)和移除(叫做弹出),只发生在一个位置——栈的顶部。javascript为数组专门提供了push()和pop()方法,以便实现类似栈的行为

队列数据结构的访问规则是FIFO(first-in-first-out,先进先出)。队列在列表的末端添加项,从列表的前端移除项。结合使用shift()和push()方法,可以像使用队列一样使用数组

1.【push()】
push()方法可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。所以,该数组会改变原数组!!!

var a = [];a.push(1) // 1,  a == [1]a.push(true) //2, a == [1,true]a.push([5,6]) // 3, a == [1,true [5,6]]

如果需要合并两个数组,可以使用apply方法

var a = [1,2,3]var b = [4,5,6]Array.prototype.push.apply(a,b)  //  a === [1, 2, 3, 4, 5, 6]

如果使用call方法,则会把数组b整体看成一个参数

Array.prototype.push.call(a,b) // a == [1, 2, 3, [4, 5, 6]]

push()方法也可以向对象中添加元素,添加后的对象变成类数组对象,即新加入元素的键对应数组的索引,并且对象有一个length属性

var arr = []var obj = {a:1}arr.push.call(obj,2)  //obj[object Object] {  0: 2,  a: 1,  length: 1}arr.push.call(obj,2,[1])  //obj[object Object] {  0: 2,  1: 2,  2: [1],  a: 1,  length: 3}

2.【pop()】pop()方法从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。所以,该数组会改变原数组

var a = ['a', 'b', 'c'];a.pop() // "c" , a === ["a", "b"]

对空数组使用pop()方法,不会报错,而是返回undefined
var a = []
a.pop() // undefined

  1. 【shift()】shift()方法移除数组中的第一个项并返回该项,同时数组的长度减1。所以,该数组会改变原数组
var a = [1,2,3]a.shift()  // 1  a === [2, 3]

4.【unshift()】unshift()方法在数组前端添加任意个项并返回新数组长度。所以,该数组会改变原数组

var a = ['a', 'b', 'c'];a.unshift('x')  // 4 ["x", "a", "b", "c"]

当使用多个参数调用unshift()时,参数是一次性插入的而非一次一个地插入。这意味着最终的数组中插入的元素的顺序和它们在参数列表中的顺序一致

var a = [1,2,3]a.unshift('x','u','z')  // ["x", "u", "z", 1, 2, 3]

四 、 数组排序方法
数组中存在两个可以直接用来重排序的方法: reverse()和sort()
1.reverse()方法用于反转数组的顺序,返回经过排序之后的数组;而原数组顺序也发生改变

var arr = [1,2,4,3,5];arr.reverse()  //[5, 3, 4, 2, 1]arr // [5, 3, 4, 2, 1]

2.sort()方法按字符串升序排列数组项,sort方法会调用每个数组项的toString()方法,然后比较得到的字符串排序,返回经过排序之后的数组,而原数组顺序也发生改变

var array = ['3str',3,2,'2'];array.sort();//[2, "2", 3, "3str"] var array = [1,5,10,50];array.sort();//[1, 10, 5, 50] 

sort()方法可以接受一个比较函数作为参数,以便指定哪个值在哪个值的前面。比较函数接收两个参数,如果第一个参数应该位于第二个参数之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个参数之后则返回一个正数

function compare(a,b) {   if(a<b){     return -1   }else if(a>b){     return 1   }else{     return 0   }}var ar = [10,8,101,55,29]console.log(ar.sort(compare))  // [8, 10, 29, 55, 101]

对于数值类型或valueOf()方法会返回数值类型的对象类型,比较函数可以简化

function compare(value1,value2){    return value1 - value2;}var array = ['5px',50,1,10];console.log(array.sort(compare));//["5px",1,10,50]var array = [5,50,1,10];console.log(array.sort(compare));//[1,5,10,50]

如果对一个字符串数组执行不区分大小写的字母表排序,比较函数首先将参数转化为小写字符串再开始比较

a = ['ant','Bug','cat','Dog'];a.sort();  //['Bug','Dog','ant','cat'];a.sort(function(s,t){    var a = s.toLowerCase();    var b = t.toLowerCase();    if(a < b)return -1;    if(a > b)return 1;    return 0;});//['ant','bug','cat','dog']

使用sort()方法创建一个随机数组

function compare() {   return Math.random()-0.5}var arr = [1,2,3,4,5]console.log(arr.sort(compare))  //  [2, 1, 3, 4, 5]

五:数组拼接方法

原创粉丝点击