首頁 >web前端 >js教程 >javascript中的各種數組方法實例匯總

javascript中的各種數組方法實例匯總

伊谢尔伦
伊谢尔伦原創
2017-07-18 13:07:561247瀏覽

陣列方法

堆疊方法:堆疊是一種LIFO(last-in-first-out)後進先出的資料結構,也就是最新新增的項最早被移除。棧中項的插入(叫做推入)和移除(叫做彈出)只會發生在堆疊的頂端。

push()方法:可以接收任意數量的參數,把它們逐一加到陣列結尾,並傳回修改後陣列的長度。

pop()方法:從陣列結尾移除最後一項,減少陣列的length值,然後傳回移除的項目。

佇列方法:佇列是一種FIFO(first-in-first-out)先進先出的資料結構,佇列在清單的末端新增項,從清單的前端移除項目。

shift():移除數組中的第一個項目並返回該項目,同時數組的長度減1(結合使用shift()和push()可以模擬隊列)

unshift():在數組前端添加任意個項目並返回新數組長度(結合使用unshift()和pop()從相反方向模擬隊列)

[注意]IE7及以下unshift()方法返回的總是undefined               

排序方法:

reverse():反轉數組的順序,返回經過排序後的陣列,

#reverse():按升序排列數組按升序排列數組sort方法會呼叫每個陣列項目的toString()方法,然後比較得到的字串排序,傳回經過排序之後的陣列

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

[比較函數] (使用:e.g. array1.sort(compare);)

function compare(value1,value2){
 if(value1 < value2){
 return -1;
 }else if(value1 > value2){
 return 1;
 }else{
 return 0;
 }
}

對於數值類型或valueOf()方法會傳回數值類型的物件類型,比較函數可以簡化為:

function compare(value1,value2){
return value2 - value1;
}

[tips]:常用以下方法來建立一個隨機數組

function compare(){
return Math.random() - 0.5;
}

操作方法(切開、連接、插入、刪除、替換):

concat( ):基於目前數組中的所有項目創建一個新數組,先創建當前數組一個副本,然後將接收到的參數添加到這個副本的末尾,最後返回新構建的數組(concat()不影響原始數組)

[注意1]沒有給concat()方法傳遞參數時,它只是複製當前的陣列

[注意2]如果參數是一個或多個數組,則該方法會將這些數組中的每一項都會加到結果數組中

[注意3]如果傳遞的值不是數組,這些值就會被簡單地添加到結果數組的末尾

e.g. var numbers = [1,2];
console.log(numbers.concat());//[1,2]
console.log(numbers.concat([5,4,3],[3,4,5],1,2));//[1,2,5,4,3,3,4,5,1,2];

slice ():基於目前數組中的一個或多個項目建立一個新數組,接受一個或兩個參數,即要傳回項目的起始和結束位置,最後返回新數組(slice()不影響原數組)

[注意1]沒有參數時,返回原始數組

[注意2]只有一個參數時,slice()方法會傳回從該參數指定位置開始到目前陣列結尾的所有項目

[注意3]兩個參數時,此方法傳回起始位置與結束位置之間的項,但不包含結束位置的項   

[注意4]若參數為負數時,則以陣列長度加負數作為參數

[注意5]若結束位置小於開始位置,則傳回空數組

var numbers = [1,2,3,4,5];
console.log(numbers.slice());//[1,2,3,4,5]
console.log(numbers.slice(2));//[3,4,5]
console.log(numbers.slice(2,3));//[3]
console.log(numbers.slice(-3));//-3+5=2 -> [3,4,5]
console.log(numbers.slice(2,1));//[]

splice():原數組變成修改後的數組,而splice()傳回從原數組中刪除的項目所組成的數組,若無刪除項目則傳回空數組

[a]刪除:兩個參數為要刪除的第一項的位置、要刪除的項數

[b]插入:三個參數為起始位置、0(要刪除的基數)、要插入的項

[c]替換:三個參數為起始位置、要刪除的項目數、要插入的項目

[注意1]若第一個參數為負數時,則以陣列長度加負數為參數   

[註2]若第二個參數為負數時,則以0作為參數  

var numbers = [1,2,3,4,5];
    console.log(numbers.splice(0,2),numbers);//[1,2] [3,4,5]
    var numbers = [1,2,3,4,5];
    console.log(numbers.splice(1,0,11,12),numbers);//[] [1,11,12,2,3,4,5]
    var numbers = [1,2,3,4,5];
    console.log(numbers.splice(1,3,11,12),numbers);//[2,3,4] [1,11,12,5]
    var numbers = [1,2,3,4,5];
    console.log(numbers.splice(-4,3,11,12),numbers);//-4+5=1 -> [2,3,4] [1,11,12,5]
    var numbers = [1,2,3,4,5];
    console.log(numbers.splice(-4,-3,11,12),numbers);//-4+5=1 -> [] [1,11,12,2,3,4,5]

位置方法(ECMAScript5):兩個參數:要尋找的項目、表示尋找起點位置的索引(可選)。傳回第一個滿足條件的查找項目在陣列中的位置,如果沒有找到則傳回-1(位置方法不會影響原始數組)

[注意]在比較時,使用全等運算子

indexOf()

lastIndexOf()   

var person = {name: &#39;Nicholas&#39;};
var people = [{name: &#39;Nicholas&#39;}];
var morePeople = [person];
alert(people.indexOf(person));//-1,因为person和people[0]虽然值相同,但是是两个引用
alert(morePeople.indexOf(person));//0,因为person和morepeople[0]是同一个引用
alert(morePeople.indexOf({name: &#39;Nicholas&#39;}));//-1,因为不是同一个引用

[tips]若傳回滿足條件的項目的所有索引值

function allIndexOf(array,value){
 var result = [];
 var pos = array.indexOf(value);
 if(pos === -1){
  return -1;
 }
 while(pos > -1){
  result.push(pos);
  pos = array.indexOf(value,pos+1);
 }
 return result;
  }
 var array = [1,2,3,3,2,1];
 console.log(allIndexOf(array,1));//[0,5]

迭代方法(ECMAScript5):兩個參數:要在每一項上執行的函數、執行該函數作用域物件-影響this的值(可選)。傳入這些方法中的函數會接收三個參數:數組項的值、該項在數組中的位置、數組物件本身(迭代方法不會影響原始數組)

every():對數組中的每一項運行給定函數,如果函數對每一項都傳回true,則傳回true

filter():對陣列中的每一項執行給定函數,則傳回該函數會傳回true的項組成的數組(常用於查詢符合條件的所有數組項)

forEach():對數組中的每一項運行給定函數,這個方法沒有返回值(相當於for循環)

map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组(常用于创建包含项与另一个数组一一对应的数组)

some():对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true

 var numbers = [1,2,3,4,5,6,7,8,9,0];
 var sum = 0;
 var everyResult = numbers.every(function(item,index,array){
  return (item>2);
 });
 var filterResult = numbers.filter(function(item,index,array){
  return (item>2)
 });
 var forEachResult = numbers.forEach(function(item,index,array){
  sum += item;
  return (item>2)
 });
 var mapResult = numbers.map(function(item,index,array){
  return (item*2)
 }); 
 var som =  numbers.some(function(item,index,array){
  return (item>2)
 }); 
 console.log(everyResult);//false
 console.log(filterResult);//[3,4,5,6,7,8,9]
 console.log(forEachResult,sum);//undefined 45 
 console.log(mapResult);//[2,4,6,8,10,12,14,16,18,0]
 console.log(someResult);//true
 [tips] function logArray(value,index,array){
   console.log(value);
  }
  [2,5,,,,,9].forEach(logArray)//2 5 9

归并方法(ECMAScript5):迭代数组的所有项,构建一个最终返回的值。接收两个参数:一个在每一项上调用的函数、作为归并基础的初始值(可选)。传给reduce()和reduceRight()的函数接受4个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上。因此,第一个参数是数组第一项,第二个参数是数组第二项(归并方法不会影响原数组)

reduce()

reduceRight()

var sum = values.reduce(function(prev,cur,index,array){
    return prev+cur;
   })
   alert(sum);//15

以上是javascript中的各種數組方法實例匯總的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn