js數組方法,你記住了嗎?

2018.05.21

最近在做項目的時候,感覺很多方法,又不記得了。所以趕緊補一下…

第一部分:數組自身的方法

常用的方法,靠前展示。

  • toString()

作用:調用數組每一項的 toString()方法,返回以逗號分隔的字符串

參數:無

返回值:轉化之後的字符串

原數組是否改變:否

let arr = ['a','b','c','d']
let arr1 = arr.toString();
console.log(arr) // ["a", "b", "c", "d"]
console.log(arr1) // a,b,c,d
  • join()

作用:將數組轉化爲字符串。

參數:分隔符

返回值:拼接之後的字符串

原數組是否改變:否

join()方法,調用每個元素的 toString()方法。並使用指定的分隔符(默認是逗號)進行拼接。
let arr = [1, 2, {name: "zhangsan"}, 3];
let arr1 = arr.join('-');
console.log(arr);//[1, 2, Object, 3]
console.log(arr1) // 1-2-[object Object]-3
  • push()

作用:在數組末尾添加元素

參數:任意參數

返回值:修改後的數組的長度

原數組是否改變:是

let arr = ['a','b','c','d'];
let arr1 = arr.push('11');
console.log(arr) // ["a", "b", "c", "d", "11"]
console.log(arr1) // 5
  • pop()

作用:移除數組末尾的最後一項

參數:無

返回值:移除的那一項

原數組是否改變:是

let arr = ['a','b','c','d'];
let arr1 = arr.pop();
console.log(arr) // ["a", "b", "c"]
console.log(arr1) // d
  • unshift()

作用:在數組開頭添加元素

參數:任意

返回值:修改後的數組長度

原數組是否改變:是

let arr = ['a','b','c','d'];
let arr1 = arr.unshift('11');
console.log(arr) // ["11", "a", "b", "c", "d"]
console.log(arr1) // 5
  • shift()

作用:刪除數組的第一項

參數:無

返回值:刪除的那一項

原數組是否改變:是

let arr = ['a','b','c','d'];
let arr1 = arr.shift();
console.log(arr) // ["b", "c", "d"]
console.log(arr1) // a
  • reverse()

作用:反轉數組的順序

參數:無

返回值:反轉順序之後的數組

原數組是否改變:是

let arr = ['a','b','c','d'];
let arr1 = arr.reverse();
console.log(arr) // ["d", "c", "b", "a"]
console.log(arr1) // ["d", "c", "b", "a"] 
  • concat()

作用:合併數組

參數:任意

返回值:合併之後的數組

原數組是否改變:否

let arr = ['a','b','c','d'];
let arrCopy = arr.concat('e',[1,2,3]);
console.log(arr) // ["a", "b", "c", "d"]
console.log(arrCopy) // ["a", "b", "c", "d", "e", 1, 2, 3]
  • slice()

作用:截取部分數組

參數:起始下標和結束下標

返回值:返回截取的部分數組。不包括結束位置的項。

原數組是否改變:否


let arr1 = arr.slice(1,3)
console.log(arr) // ["a", "b", "c", "d"]
console.log(arr1) // ["b", "c"]
  • splice()

作用:對數組實現:刪除、插入、替換 功能。

參數:見下面

返回值:返回的修改過的項

原數組是否改變:是

刪除:可以刪除任意數量的項,只需指定 2個參數:要刪除的第一項的位置和要刪除的項數。例如, splice(0,2)會刪除數組中的前兩項。

插入:可以向指定位置插入任意數量的項,只需提供 3 個參數:起始位置、 0(要刪除的項數)和要插入的項。例如,splice(2,0,4,6)會從當前數組的位置 2 開始插入46。

替換:可以向指定位置插入任意數量的項,且同時刪除任意數量的項,只需指定 3 個參數:起始位置、要刪除的項數和要插入的任意數量的項。插入的項數不必與刪除的項數相等。例如,splice (2,1,4,6)會刪除當前數組位置 2 的項,然後再從位置 2 開始插入46。

// 刪除
let arr = ['a','b','c','d'];
let arrRemoved = arr.splice(0,2);
console.log(arr) // ["c", "d"]
console.log(arrRemoved) // ["a", "b"]

// 插入
let arr = ['a','b','c','d'];
let arrInsert = arr.splice(2,0,4,6);
console.log(arr) // ["a", "b", 4, 6, "c", "d"]
console.log(arrInsert) // []

// 替換
let arr = ['a','b','c','d'];
let arrReplace = arr.splice(2,1,4,6);
console.log(arr) // ["a", "b", 4, 6, "d"]
console.log(arrReplace) // ["c"]
  • indexOf() 和 lastIndexOf()

作用:返回對應項的索引

參數:一個參數或兩個參數

返回值:

原數組是否改變:無

indexOf():接收兩個參數:要查找的項和(可選的)表示查找起點位置的索引。其中, 從數組的開頭(位置 0)開始向後查找。 

lastIndexOf:接收兩個參數:要查找的項和(可選的)表示查找起點位置的索引。其中, 從數組的末尾開始向前查找。

這兩個方法都返回要查找的項在數組中的位置,或者在沒找到的情況下返回-1。在比較第一個參數與數組中的每一項時,會使用全等操作符。

let arr = [1,3,5,7,7,5,3,1];
console.log(arr.indexOf(5)); //2
console.log(arr.lastIndexOf(5)); //5
console.log(arr.indexOf(5,2)); //2
console.log(arr.lastIndexOf(5,4)); //2
console.log(arr.indexOf("5")); //-1
console.log(arr) // [1,3,5,7,7,5,3,1]
  • forEach()

作用:對數組中的每一項運行給定的函數。

參數:參數是function函數。函數的參數分別爲:值,索引,數組本身

返回值:無 (因此在callback裏面加不加return,效果都是一樣的)

原數組是否改變:這個不確定。跟運行的回調函數有關。

let arr = [1,2,3,4,5];
let arr1 = arr.forEach(function(item,index,array){
    array[index] = item * 10
})
console.log(arr) //  [10,20,30,40,50]
console.log(arr1) // undefined
  • map()

作用:map就是‘映射’。對數組中的每一項運行給定函數

參數:參數是function函數。函數參數分別是:值,索引,數組本身。

返回值:調用函數之後的結果組成的數組

原數組是否改變:否

let arr = [1,2,3,4,5];
let arr1 = arr.map(function(item,index,array) {
   return item = item * 10
})
console.log(arr) // [1, 2, 3, 4, 5]
console.log(arr1) // [10,20,30,40,50]
  • filter()

作用:‘過濾’。對數組中每一項運行給定的函數。

參數:參數是function函數。函數有三個參數:值,索引,數組本身

返回值:調用函數之後的結果組成的數組。

原數組是否改變:不確定。因爲跟運行的函數有關。

let arr = [1,2,3,4,5];
let arr1 = arr.filter(function(item,index) {
   return item > 3
})
console.log(arr) // [1, 2, 3, 4, 5]
console.log(arr1) // [ 4, 5]
  • every()

作用:判斷數組中的每一項是否滿足條件。

參數:參數是函數function。函數有三個參數:值,索引,數組本身

返回值:數組中的所有項滿足條件,才返回 true

原數組是否改變:涉及運行的函數,因此不確定

let arr = [1,2,3,4,5];
let arr1 = arr.every(function(item,index) {
   return item < 10
})
console.log(arr) // [1, 2, 3, 4, 5]
console.log(arr1) // true
  • some()

作用:判斷數組中的是否有滿足條件的一項。

參數:參數是函數function。函數有三個參數:值,索引,數組本身

返回值:數組中的有一項滿足條件,才返回 true

原數組是否改變:涉及運行的函數,因此不確定

let arr = [1,2,3,4,5];
let arr1 = arr.some(function(item,index) {
   return item < 2
})
console.log(arr) // [1, 2, 3, 4, 5]
console.log(arr1) // true
  • reduce() 和 reduceRight()

作用:迭代數組的所有項,然後構建一個最終返回的值。

參數:callback[, initialValue]

返回值:數組迭代之後,整體的迭代結果。

原數組是否改變:涉及運行的函數,因此不確定

reduce()方法從數組的第一項開始,逐個遍歷到最後。而 reduceRight()則從數組的最後一項開始,向前遍歷到第一項。

參數說明:
callback迭代函數,有四個參數(prev, cur, index, array)
prev 前一個值,(initialValue || 數組第一項 || 上一次迭代的結果)
cur 當前迭代項
index 當前迭代項索引
array 迭代的原數組
initialValue 迭代的基礎值,不傳基礎值是數組第一項


// 數組求和
let arr = [1, 2, 3];
let sum = arr.reduce((prev, cur, index, array) => {
    return prev + cur;
});
console.log(arr, sum); // [ 1, 2, 3 ] 6

// 傳initialValue 基礎值的示例
let sum1 = arr.reduce((prev, cur, index, array) => {
    return prev + cur;
}, 10);
// 返回的值是:10+1+2+3
console.log(arr, sum1); // [ 1, 2, 3 ] 16
  • sort()

作用:將數組升序排列

參數:默認無參數 | 接收一個比較函數

返回值:升序之後的數組

原數組是否改變:是

let arr = ['b','c','d','a'];
let arr1 = arr.sort();
console.log(arr); // ["a", "b", "c", "d"]
console.log(arr1) // ["a", "b", "c", "d"]

在排序時,sort()方法會調用每個數組項的toString()轉型方法,然後比較得到的字符串,以確定如何排序。即使數組中的每一項都是數值,sort()方法比較的也是字符串,因此會出現以下的這種情況
let array = [13, 24, 51, 3];
let array1 = array.sort();
console.log(array); // [13, 24, 3, 51]
console.log(array1) // [13, 24, 3, 51]

爲了解決這個問題:sort方法可以接收一個比較函數。比較函數接收兩個參數,如果第一個參數應該位於第二個之前則返回一個負數,如果兩個參數相等則返回 0,如果第一個參數應該位於第二個之後則返回一個正數。
function compare(value1, value2) {
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
array = [13, 24, 51, 3];
console.log(array.sort(compare)); // [3, 13, 24, 51]

如果需要通過比較函數產生降序排序的結果,只要交換比較函數返回的值即可:
function compare(value1, value2) {
if (value1 < value2) {
return 1;
} else if (value1 > value2) {
return -1;
} else {
return 0;
}
}
array = [13, 24, 51, 3];
console.log(array.sort(compare)); // [51, 24, 13, 3]
  • find()

作用:查找數組中第一個符合條件的元素,返回該元素

參數:參數是函數function。函數的三個參數是:值,索引,數組本身。

返回值:符合條件的第一個元素

原數組是否改變:涉及到函數,不確定。

let arr = [1, 2, 3, 4, 5];
let arr1 = arr.find((item, index, array) => {
    return item > 2;
})
console.log(arr); // [1, 2, 3, 4, 5] 
console.log(arr1) // 3
  • findIndex()

作用:查找數組中第一個符合條件的元素的索引。並返回索引。

參數:參數是函數function。函數的三個參數是:值,索引,數組本身。

返回值:符合條件的第一個元素的索引

原數組是否改變:涉及到函數,不確定。

let arr = [1, 2, 3, 4, 5];
let arr1 = arr.findIndex((item, index, array) => {
    return item > 2;
})
console.log(arr); // [1, 2, 3, 4, 5] 
console.log(arr1) // 2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章