JavaScript
數組的方法
join
join
:接受一個參數作爲分隔符,將數組合併成以指定分隔符連接的字符串並返回,參數缺省時,默認用’,'分隔;不改變原數組;
let arr=[1,2,3]
console.log(arr.join('-')); //1-2-3
console.log(arr) // [1,2,3]
push
和pop
push
和pop
分別在數組尾部插入和刪除一個元素;都會改變原數組;其中:
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]
shift
和unshiht
shift
和unshiht
分別在數組的開頭刪除和插入元素,改變原數組;
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]
push
和shift
,pop
和unshiht
可以模擬實現線性表數據結構;
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處理
indexOf
和lastIndexOf
indexOf(item,strIndex)
:表示從strIndex
位置開始向後查找item
首次出現的位置索引。strIndex如果不傳,則從頭開始查找;lastIndexOf(item,strIndex)
:表示從strIndex
位置開始向前查找item
首次出現的位置索引。strIndex如果不傳,則從數組最後一項開始向前查找;
Array.from ES6新增
該方法將類似數組的對象和可遍歷(iterable)的對象(包括ES6的Map
和Set
)轉化成真正的數組;
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]
find
和findIndex
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]
fill
ES6新增
使用給定的值填充數組;改變原數組,返回改變後的數組
[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"