天天看點

javascript數組常用方法!

簡介:

數組總共有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 = [,undefined,,null,]
arr.toString()   //"1,,2,,3"
           
  1. 【valueOf()】**valueOf()方法傳回數組對象本身
var a = [,,]
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 = [,,]
arr.join()  // "1,2,3"
arr.join('')  // "123"
arr.join(' ')  // "1 2 3"

var b = new Array();
b.join()  // ",,,,,,,,,"
           

2.如果數組中的某一項的值是null或者undefined,則該值在join()方法傳回的結果中以空字元串表示

var b = [,undefined,,null,]
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 = {:'a',:'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() // ,  a == []
a.push(true) //, a == [,true]
a.push([,]) // , a == [,true [,]]
           

如果需要合并兩個數組,可以使用apply方法

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

如果使用call方法,則會把數組b整體看成一個參數

Array.prototype.push.call(a,b) // a == [, , , [, , ]]
           

push()方法也可以向對象中添加元素,添加後的對象變成類數組對象,即新加入元素的鍵對應數組的索引,并且對象有一個length屬性

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

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 = [,,]
a.shift()  // 1  a === [2, 3]
           

4.【unshift()】unshift()方法在數組前端添加任意個項并傳回新數組長度。是以,該數組會改變原數組

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

當使用多個參數調用unshift()時,參數是一次性插入的而非一次一個地插入。這意味着最終的數組中插入的元素的順序和它們在參數清單中的順序一緻

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

四 、 數組排序方法

數組中存在兩個可以直接用來重排序的方法: reverse()和sort()

1.reverse()方法用于反轉數組的順序,傳回經過排序之後的數組;而原數組順序也發生改變

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

2.sort()方法按字元串升序排列數組項,sort方法會調用每個數組項的toString()方法,然後比較得到的字元串排序,傳回經過排序之後的數組,而原數組順序也發生改變

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

sort()方法可以接受一個比較函數作為參數,以便指定哪個值在哪個值的前面。比較函數接收兩個參數,如果第一個參數應該位于第二個參數之前則傳回一個負數,如果兩個參數相等則傳回0,如果第一個參數應該位于第二個參數之後則傳回一個正數

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

對于數值類型或valueOf()方法會傳回數值類型的對象類型,比較函數可以簡化

function compare(value1,value2){
    return value1 - value2;
}
var array = ['5px',,,];
console.log(array.sort(compare));//["5px",1,10,50]
var array = [,,,];
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 -;
    if(a > b)return ;
    return ;
});//['ant','bug','cat','dog']
           

使用sort()方法建立一個随機數組

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

五:數組拼接方法

繼續閱讀