JavaScript數組使用總結

JavaScript數組的方法

join

join:接受一個參數作爲分隔符,將數組合併成以指定分隔符連接的字符串並返回,參數缺省時,默認用’,'分隔;不改變原數組;

let arr=[1,2,3]
console.log(arr.join('-')); //1-2-3
console.log(arr) // [1,2,3]

pushpop

pushpop分別在數組尾部插入和刪除一個元素;都會改變原數組;其中:

  • push:返回新數組的長度;
  • pop:返回數組刪除的元素;
let arr=[1,2,3]
console.log(arr.push('a'))  // 4
console.log(arr) //[1,2,3,"a"]
console.log(arr.pop())  // "a"
console.log(arr) //[1,2,3]

shiftunshiht

shiftunshiht分別在數組的開頭刪除和插入元素,改變原數組;

  • shift:返回從數組刪除的元素;
  • unshiht:返回新數組的長度;
let arr=[1,2,3]
console.log(arr.shift())  // 1
console.log(arr) //[2,3]
console.log(arr.unshift("a"))  // 3
console.log(arr) //["a",2,3]

pushshiftpopunshiht可以模擬實現線性表數據結構;

sort

sort對數組排序,默認按照升序排列;改變原數組,返回改變後的數組;

注意:sort默認情況下,按照數組每一項對應字符串的大小做升序排列;

let arr=[21,1,3]
arr.sort()     // [1,21,3]
arr ;          // [1,21,3]

sort函數可以傳入一個函數作爲參數,按指定的規則進行排序;

//升序排列
function compare(value1,value2){
    if(value1===value2) return 0
    if(value1>value2)  return 1
    if(value1<value2)  return -1
}
let arr=[21,1,3]
arr.sort(compare)     // [1,3,21]
arr ;          // [1,3,21]

reverse

實現數組的反轉;改變原數組,返回改變後的數組;

let arr=[1,2,3] 
arr.reverse()  //[3,2,1]
arr            //[3,2,1]

concat

將參數逐項插入到目標數組最後,不改變原數組,返回新數組;

let arr=[1,2];
arr.concat(3,[4,5])  // [1,2,3,4,5]
arr                  // [1,2]

當不傳參數時,相當於複製一個數組;

slice

該函數可以接受兩個參數,分別爲起始位置和結束位置,返回從起始位置開始到結束位置之間的項組成的數組。包含其實位置,但不包括結束位置。不改變原數組。

  • 如果不穿參數,起始位置默認爲數組第一項,結束位置爲數組最後一項後邊的位置;相當於複製一個數組;
  • 如果只傳入一個參數,那麼結束位置默認爲該數組最後一項後邊的位置。
let arr=[1,2,3,4,5]
arr.slice(1,2)  //2
arr  //[1,2,3,4,5]
arr.slice()   //[1,2,3,4,5]
arr.slice(1)  //[2,3,4,5]

slice()的參數可以爲負值,如果爲負值,則加上數組的長度,作爲當前的值。

let arr=[1,2,3,4,5]
arr.slice(-2)  //[4,5]
arr.slice(3)   //[4,5]

如果slice(index1,index2)中最終計算值 index1>index2. 此時會返回一個空數組;

splice

這是一個很強大的方法,可以接受以下參數splice(index,howmany,item1,.....,itemX)

  • index:必填項;
  • haomany:必填項;
  • item1,…,itemX:選填

表示從數組index位置刪除haomany項,同時插入item1,.....,itemX,返回被刪除項組成的數組,如果沒有刪除會返回空數組;會改變原數組;

let arr=[1,2,3,4]
arr.splice(1,2,8,9)  //[2,3]
arr  //[1,8,9,4]

如果haomany爲負數。則當做0處理

indexOflastIndexOf

  • indexOf(item,strIndex):表示從strIndex位置開始向後查找item首次出現的位置索引。strIndex如果不傳,則從頭開始查找;
  • lastIndexOf(item,strIndex):表示從strIndex位置開始向前查找item首次出現的位置索引。strIndex如果不傳,則從數組最後一項開始向前查找;

Array.from ES6新增

該方法將類似數組的對象和可遍歷(iterable)的對象(包括ES6的MapSet)轉化成真正的數組;

let arrLike={
    "0":"a",
    "1":"b",
    length:2
}
Array.from(arrLike)  //["a","b"]
Array.from("abc")   //["a","b","c"] 字符串有Iterator接口;
Array.from(new Set([1,2,3]))  //[1,2,3]

findfindIndex ES6新增

-find:找出數組中第一個滿足條件的項,若沒有,返回undefined.參數是一個回調函數;

  • findIndex:找出數組中第一個滿足條件的項的索引,若沒有返回 -1,參數是一個回調函數;
[1,2,3,4].find((value,index,arr)=>(value>2))  //3
[1,2,3,4].findIndex((value,index,arr)=>(value>2))  //2

Array.of ES6新增

將一組值轉化爲數組

Array.of(1,2,3) //[1,2,3]

copyWithin ES6新增

將指定位置的成員複製到其他位置;返回當前數組,會改變原數組;Array.prototype.copyWithin(target, start = 0, end = this.length)接受三個參數

  • target:必需,從該位置開始替換數據
  • start:從該位置開始讀取數據;
  • end:到該位置停止讀取;
[1,2,3,4,5].copyWithin(0,3) //[4,5,3,4,5]

fillES6新增

使用給定的值填充數組;改變原數組,返回改變後的數組

[1,2,3].fill(7)  //[7,7,7]
new Array(3).fill(9) //[9,9,9]

includes ES6新增

返回一個布爾值,表示是否包含給定的值。

[1,3,2].includes(2)  //true

該方法還可以接受第二個參數,表示開始搜索的起始位置,默認爲0,若爲負數,表示倒數的位置;

flat

將嵌套的數組“拉平”。返回一個新的數組,對原數據沒有影響;接受一個參數,表示要拉平的層數。默認爲1;

[1,2,3,[4,5]].flat()  //[1,2,3,4,5]
[1,2,[3,4,[5]]].flat()  //[1,2,3,4,[5]]

flatMap

先對數組的每個成員執行一個函數,相當於map函數,再調用一次flat函數。不改變原數組;

[2, 3, 4].flatMap((x) => [x, x * 2])
// [2,4,3,6,4,8]

JavaScript數組的遍歷

for循環

這個沒什麼好說的,最常見的循環語句;

forEach

[1,2,3].forEach(item=>{
    console.log(item*2)
})
//2
//4
//6

for..in

for(let k in arr){
    
}
//這裏的k表示數組的下標或者對象的key

map

數組每一項都調用一個函數,返回一個新數組,不改變原數組。

let arr=[1,2,3];
let arr1=arr.map(item=>(item*2))
arr  //[1,2,3]
arr1 //[2,4,6]

filter

過濾數字中滿足條件的項;返回新數組,不改變原數組;

[1,2,3].filter(item=>(item%2===1))  //[1,3]

entries,keys 和 values ES6新增

該方法要配合for...of使用:

for (let index of ['a', 'b'].keys()) {
  console.log(index);
}
// 0
// 1

for (let elem of ['a', 'b'].values()) {
  console.log(elem);
}
// 'a'
// 'b'

for (let [index, elem] of ['a', 'b'].entries()) {
  console.log(index, elem);
}
// 0 "a"
// 1 "b"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章