數(shù)組操作方法匯總

常用方法速覽:


image.png

接下來是比較全的、詳細(xì)的方法用法

1. Array.from()

該方法從一個(gè)類似數(shù)組或可迭代對象中創(chuàng)建一個(gè)新的,淺拷貝的數(shù)組實(shí)例。

語法:Array.from(arrayLike[, mapFn[, thisArg]])

參數(shù):
arrayLike -- 想要轉(zhuǎn)換成數(shù)組的偽數(shù)組對象或可迭代對象。
mapFn -- (可選參數(shù)) 如果指定了該參數(shù),新數(shù)組中的每個(gè)元素會(huì)執(zhí)行該回調(diào)函數(shù)。
thisArg -- (可選參數(shù)) 可選參數(shù),執(zhí)行回調(diào)函數(shù) mapFn 時(shí) this 對象。

返回值:一個(gè)新的數(shù)組實(shí)例。

console.log(Array.from('foo')); //  ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x)); //  [2, 4, 6]

2. Array.isArray()

用于確定傳遞的值是否是一個(gè) Array。

Array.isArray([1, 2, 3]);  
// true
Array.isArray({foo: 123}); 
// false
Array.isArray("foobar");   
// false
Array.isArray(undefined);  
// false

3. Array.of()

創(chuàng)建一個(gè)具有可變數(shù)量參數(shù)的新數(shù)組實(shí)例,而不考慮參數(shù)的數(shù)量或類型。
Array.of() 和 Array 構(gòu)造函數(shù)之間的區(qū)別在于處理整數(shù)參數(shù):Array.of(7) 創(chuàng)建一個(gè)具有單個(gè)元素 7 的數(shù)組,而 Array(7) 創(chuàng)建一個(gè)長度為7的空數(shù)組(注意:這是指一個(gè)有7個(gè)空位(empty)的數(shù)組,而不是由7個(gè)undefined組成的數(shù)組)。

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

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

4. concat()

用于合并兩個(gè)或多個(gè)數(shù)組。此方法不會(huì)更改現(xiàn)有數(shù)組,而是返回一個(gè)新數(shù)組。

語法:var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])

var array1 = ['a', 'b', 'c'];
var array2 = ['d', 'e', 'f'];
var arr = array1.concat(array2);
console.log(arr); // ["a", "b", "c", "d", "e", "f"]
console.log(array1); // ["a", "b", "c"]

5. copyWithin()

淺復(fù)制數(shù)組的一部分到同一數(shù)組中的另一個(gè)位置,并返回它,不會(huì)改變原數(shù)組的長度,但是會(huì)\color{red}{改變原數(shù)組}(同返回值)。

語法:arr.copyWithin(target[, start[, end]])

參數(shù):
target -- 0 為基底的索引,復(fù)制序列到該位置。如果是負(fù)數(shù),target 將從末尾開始計(jì)算。如果 target 大于等于 arr.length,將會(huì)不發(fā)生拷貝。如果 target 在 start 之后,復(fù)制的序列將被修改以符合 arr.length。
start -- 0 為基底的索引,開始復(fù)制元素的起始位置。如果是負(fù)數(shù),start 將從末尾開始計(jì)算。如果 start 被忽略,copyWithin 將會(huì)從0開始復(fù)制。
end -- 0 為基底的索引,開始復(fù)制元素的結(jié)束位置。copyWithin 將會(huì)拷貝到該位置,但不包括 end 這個(gè)位置的元素。如果是負(fù)數(shù), end 將從末尾開始計(jì)算。

返回值:改變后的數(shù)組。

var array1 = ['a', 'b', 'c', 'd', 'e'];
console.log(array1.copyWithin(0, 3, 4));  // ["d", "b", "c", "d", "e"]  
console.log(array1);  // ["d", "b", "c", "d", "e"]
console.log(array1.copyWithin(1, 3));  // ["d", "d", "e", "d", "e"]

let numbers = [1, 2, 3, 4, 5];
numbers.copyWithin(-2); // [1, 2, 3, 1, 2]
numbers.copyWithin(0, 3); // [4, 5, 3, 4, 5]
numbers.copyWithin(0, 3, 4); // [4, 2, 3, 4, 5]
numbers.copyWithin(-2, -3, -1); // [1, 2, 3, 3, 4]

6. entries()

該方法返回一個(gè)新的Array Iterator對象,該對象包含數(shù)組中每個(gè)索引的鍵/值對。

var array1 = ['a', 'b', 'c'];
var iterator1 = array1.entries();
console.log(iterator1.next().value); // [0, "a"]
console.log(iterator1.next().value); //  [1, "b"]

var arr = ["a", "b", "c"];
var iterator = arr.entries();
for (let e of iterator) {
  console.log(e);
}
// [0, "a"] 
// [1, "b"] 
// [2, "c"]

7. every()

該方法測試一個(gè)數(shù)組內(nèi)的所有元素是否都能通過某個(gè)指定函數(shù)的測試。它返回一個(gè)布爾值。若收到一個(gè)空數(shù)組,此方法在一切情況下都會(huì)返回 true。

語法:arr.every(callback[, thisArg])

參數(shù):
callback -- 用來測試每個(gè)元素的函數(shù),它可以接收三個(gè)參數(shù):
element : 用于測試的當(dāng)前值。
index :可選,用于測試的當(dāng)前值的索引。
array:可選,調(diào)用 every 的當(dāng)前數(shù)組。
thisArg -- 執(zhí)行 callback 時(shí)使用的 this 值。

返回值:如果回調(diào)函數(shù)的每一次返回都為 truthy 值,返回 true ,否則返回 false。

every 方法為數(shù)組中的每個(gè)元素執(zhí)行一次 callback 函數(shù),直到它找到一個(gè)會(huì)使 callback 返回 falsy 的元素。如果發(fā)現(xiàn)了一個(gè)這樣的元素,every 方法將會(huì)立即返回 false。否則,callback 為每一個(gè)元素返回 true,every 就會(huì)返回 true。callback 只會(huì)為那些已經(jīng)被賦值的索引調(diào)用。不會(huì)為那些被刪除或從未被賦值的索引調(diào)用。

const val = [12, 5, 8, 130, 44].every((x,i,array) => {
  console.log(x,i,array);
  return x >= 10;
});
// 12 0 [12, 5, 8, 130, 44]
// 5 1  [12, 5, 8, 130, 44]
console.log(val); // false
[12, 54, 18, 130, 44].every(x => x >= 10); // true

8. some()

測試是否至少有一個(gè)元素可以通過被提供的函數(shù)方法。該方法返回一個(gè)Boolean類型的值。

[2, 5, 8, 1, 4].some(x => x > 10);  // false
[12, 5, 8, 1, 4].some(x => x > 10); // true

9. fill()

用一個(gè)固定值填充一個(gè)數(shù)組中從起始索引到終止索引內(nèi)的全部元素。不包括終止索引。\color{red}{改變原數(shù)組}(同返回值)

語法:arr.fill(value[, start[, end]])

value -- 用來填充數(shù)組元素的值。
start -- 起始索引,默認(rèn)值為0。
end -- 終止索引,默認(rèn)值為 this.length。

返回值:改變后的數(shù)組。

var arr = [1, 2, 3];
arr.fill(4); // [4, 4, 4]
console.log(arr); // [4, 4, 4]

[1, 2, 3].fill(4, 1); // [1, 4, 4]
[1, 2, 3].fill(4, 1, 2);  // [1, 4, 3]
[1, 2, 3].fill(4, 1, 1); // [1, 2, 3]
[1, 2, 3].fill(4, 3, 3); // [1, 2, 3]
[1, 2, 3].fill(4, -3, -2); // [4, 2, 3]
[1, 2, 3].fill(4, NaN, NaN); // [1, 2, 3]
[1, 2, 3].fill(4, 3, 5); // [1, 2, 3]

10. filter()

創(chuàng)建一個(gè)新數(shù)組, 其包含通過所提供函數(shù)實(shí)現(xiàn)的測試的所有元素。

語法:var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])

返回值:一個(gè)新的、由通過測試的元素組成的數(shù)組,如果沒有任何數(shù)組元素通過測試,則返回空數(shù)組。

var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(val => val.length > 6);
console.log(result); // ["exuberant", "destruction", "present"]
console.log(words); // ["spray", "limit", "elite", "exuberant", "destruction", "present"]

11. find()

返回?cái)?shù)組中滿足提供的測試函數(shù)的第一個(gè)元素的值。否則返回undefined。

語法:arr.find(callback[, thisArg])

返回值:數(shù)組中第一個(gè)滿足所提供測試函數(shù)的元素的值,否則返回 undefined。

find方法對數(shù)組中的每一項(xiàng)元素執(zhí)行一次 callback 函數(shù),直至有一個(gè) callback 返回 true。當(dāng)找到了這樣一個(gè)元素后,該方法會(huì)立即返回這個(gè)元素的值,否則返回 undefined。

var array1 = [5, 12, 8, 130, 44];
var found = array1.find((element,i) => {
  console.log(i); // 0 1
  return element > 10;
});
console.log(found); // 12

12. findIndex()

返回?cái)?shù)組中滿足提供的測試函數(shù)的第一個(gè)元素的索引。否則返回-1。

var array1 = [5, 12, 8, 130, 44];
var found = array1.findIndex((element,i) => {
  console.log(i); // 0 1
  return element > 10;
});
console.log(found); // 1

13. flat()

按照一個(gè)可指定的深度遞歸遍歷數(shù)組,并將所有元素與遍歷到的子數(shù)組中的元素合并為一個(gè)新數(shù)組返回。不改變原數(shù)組。

語法:var newArray = arr.flat(depth)

返回值:一個(gè)包含將數(shù)組與子數(shù)組中所有元素的新數(shù)組。

var arr1 = [1, 2, [3, 4]];
arr1.flat();  // [1, 2, 3, 4]

var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat(); // [1, 2, 3, 4, [5, 6]]

var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2); // [1, 2, 3, 4, 5, 6]

//使用 Infinity 作為深度,展開任意深度的嵌套數(shù)組
arr3.flat(Infinity);  // [1, 2, 3, 4, 5, 6]

flat() 方法會(huì)移除數(shù)組中的空項(xiàng):

var arr4 = [1, 2, , 4, 5];
arr4.flat(); // [1, 2, 4, 5]

14. flatMap()

首先使用映射函數(shù)映射每個(gè)元素,然后將結(jié)果壓縮成一個(gè)新數(shù)組。它與 map 和 深度值1的 flat 幾乎相同,但 flatMap 通常在合并成一種方法的效率稍微高一些。
語法:

var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
    // 返回新數(shù)組的元素
}[, thisArg])

返回值:一個(gè)新的數(shù)組,其中每個(gè)元素都是回調(diào)函數(shù)的結(jié)果,并且結(jié)構(gòu)深度 depth 值為1。

var arr1 = [1, 2, 3, 4];

arr1.map(x => [x * 2]);  // [[2], [4], [6], [8]]

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

// 只會(huì)將 flatMap 中的函數(shù)返回的數(shù)組 “壓平” 一層
arr1.flatMap(x => [[x * 2]]); // [[2], [4], [6], [8]]

15. forEach()

對數(shù)組的每個(gè)元素執(zhí)行一次提供的函數(shù)。

var arr1 = ['a', 'b', 'c', 'd'];
arr1.forEach((ele, i) => {
  console.log(ele,i); 
});
// a 0
// b 1
// c 2
// d 3

16. includes()

用來判斷一個(gè)數(shù)組是否包含一個(gè)指定的值,根據(jù)情況,如果包含則返回 true,否則返回false。使用 includes()比較字符串和字符時(shí)是區(qū)分大小寫。
注意:對象數(shù)組不能使用includes方法來檢測。

語法:arr.includes(valueToFind[, fromIndex])

參數(shù):
valueToFind -- 需要查找的元素值。
fromIndex -- 可選。從fromIndex 索引處開始查找 valueToFind。如果為負(fù)值,則按升序從 array.length + fromIndex 的索引開始搜 (即使從末尾開始往前跳 fromIndex 的絕對值個(gè)索引,然后往后搜尋)。默認(rèn)為 0。

[1, 2, 3].includes(2);     // true
[1, 2, 3].includes(4);     // false
[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true
[1, 2, NaN].includes(NaN); // true

17. indexOf()

返回在數(shù)組中可以找到一個(gè)給定元素的第一個(gè)索引,如果不存在,則返回-1。

語法:arr.indexOf(searchElement[, fromIndex = 0])

參數(shù):
searchElement -- 要查找的元素。
fromIndex -- 開始查找的位置。如果該索引值大于或等于數(shù)組長度,意味著不會(huì)在數(shù)組里查找,返回-1。如果參數(shù)中提供的索引值是一個(gè)負(fù)值,則將其作為數(shù)組末尾的一個(gè)抵消,即-1表示從最后一個(gè)元素開始查找,-2表示從倒數(shù)第二個(gè)元素開始查找 ,以此類推。 注意:如果參數(shù)中提供的索引值是一個(gè)負(fù)值,并不改變其查找順序,查找順序仍然是從前向后查詢數(shù)組。如果抵消后的索引值仍小于0,則整個(gè)數(shù)組都將會(huì)被查詢。其默認(rèn)值為0.

返回值:首個(gè)被找到的元素在數(shù)組中的索引位置; 若沒有找到則返回 -1。

var array = [2, 5, 9];
array.indexOf(2);     // 0
array.indexOf(7);     // -1
array.indexOf(9, 2);  // 2
array.indexOf(2, -1); // -1
array.indexOf(2, -3); // 0

18. join()

將一個(gè)數(shù)組(或一個(gè)類數(shù)組對象)的所有元素連接成一個(gè)字符串并返回這個(gè)字符串。如果數(shù)組只有一個(gè)項(xiàng)目,那么將返回該項(xiàng)目而不使用分隔符。

注意:如果一個(gè)元素為 undefined 或 null,它會(huì)被轉(zhuǎn)換為空字符串。

var a = ['Wind', 'Rain', 'Fire'];
var myVar1 = a.join();      // myVar1的值變?yōu)?Wind,Rain,Fire"
var myVar2 = a.join(', ');  // myVar2的值變?yōu)?Wind, Rain, Fire"
var myVar3 = a.join(' + '); // myVar3的值變?yōu)?Wind + Rain + Fire"
var myVar4 = a.join('');    // myVar4的值變?yōu)?WindRainFire"

var b = ['Wind', 'Rain', null, 'Fire', undefined, 6];
console.log(b.join('/')); // Wind/Rain//Fire//6
console.log(b); // ["Wind", "Rain", null, "Fire", undefined, 6]

19. lastIndexOf()

返回指定元素(也即有效的 JavaScript 值或變量)在數(shù)組中的最后一個(gè)的索引,如果不存在則返回 -1。從數(shù)組的后面向前查找,從 fromIndex 處開始。

語法:arr.lastIndexOf(searchElement[, fromIndex = arr.length - 1])

參數(shù):
searchElement -- 被查找的元素。
fromIndex -- 從此位置開始逆向查找。默認(rèn)為數(shù)組的長度減 1,即整個(gè)數(shù)組都被查找。如果該值大于或等于數(shù)組的長度,則整個(gè)數(shù)組會(huì)被查找。如果為負(fù)值,將其視為從數(shù)組末尾向前的偏移。即使該值為負(fù),數(shù)組仍然會(huì)被從后向前查找。如果該值為負(fù)時(shí),其絕對值大于數(shù)組長度,則方法返回 -1,即數(shù)組不會(huì)被查找。

返回值:數(shù)組中最后一個(gè)元素的索引,如未找到返回-1。

var array = [2, 5, 9, 2];
var index = array.lastIndexOf(2); // index is 3
index = array.lastIndexOf(7); // index is -1
index = array.lastIndexOf(2, 3); // index is 3
index = array.lastIndexOf(2, 2); // index is 0
index = array.lastIndexOf(2, -2); // index is 0
index = array.lastIndexOf(2, -1); // index is 3

20. map()

創(chuàng)建一個(gè)新數(shù)組,其結(jié)果是該數(shù)組中的每個(gè)元素都調(diào)用一個(gè)提供的函數(shù)后返回的結(jié)果。
語法:

var new_array = arr.map((currentValue, index, array) => {
 // Return element for new_array 
}, thisArg)
var numbers = [1, 4, 9];
var doubles = numbers.map(function(num) {
  return num * 2;
});

// doubles數(shù)組的值為: [2, 8, 18]
// numbers數(shù)組未被修改: [1, 4, 9]

21. pop()

從數(shù)組中刪除最后一個(gè)元素,并返回該元素的值。此方法\color{red}{改變原數(shù)組}

let myFish = ["angel", "clown", "mandarin", "surgeon"];
let popped = myFish.pop();
console.log(myFish);  // ["angel", "clown", "mandarin"]
console.log(popped);  // surgeon

22. push()

將一個(gè)或多個(gè)元素添加到數(shù)組的末尾,并返回該數(shù)組的新長度。此方法\color{red}{改變原數(shù)組}。

var sports = ["soccer", "baseball"];
var total = sports.push("football", "swimming");

console.log(sports);  // ["soccer", "baseball", "football", "swimming"]
console.log(total);   // 4

23. shift()

從數(shù)組中刪除第一個(gè)元素,并返回該元素的值。此方法\color{red}{改變原數(shù)組}。

let myFish = ['angel', 'clown', 'mandarin', 'surgeon'];
console.log(myFish); // ["angel", "clown", "mandarin", "surgeon"]

var shifted = myFish.shift(); 
console.log(myFish); // ["clown", "mandarin", "surgeon"]
console.log('被刪除的元素: ', shifted); // 被刪除的元素: angel

24. unshift()

將一個(gè)或多個(gè)元素添加到數(shù)組的開頭,并返回該數(shù)組的新長度,該方法\color{red}{改變原數(shù)組}

arr.unshift(element1, ..., elementN)

let arr = [1, 2];

arr.unshift(0); // result of the call is 3, which is the new array length
// arr is [0, 1, 2]

arr.unshift(-2, -1); // the new array length is 5
// arr is [-2, -1, 0, 1, 2]

arr.unshift([-4, -3]); // the new array length is 6
// arr is [[-4, -3], -2, -1, 0, 1, 2]

arr.unshift([-7, -6], [-5]); // the new array length is 8
// arr is [ [-7, -6], [-5], [-4, -3], -2, -1, 0, 1, 2 ]

25. reverse()

將數(shù)組中元素的位置顛倒,并返回該數(shù)組。該方法\color{red}{改變原數(shù)組}。

var sourceArray = ['one', 'two', 'three'];
var reverseArray = sourceArray.reverse();

console.log(sourceArray ) // ['three', 'two', 'one']
console.log(sourceArray === reverseArray); // true

26. sort()

原地算法對數(shù)組的元素進(jìn)行排序,并返回?cái)?shù)組。默認(rèn)排序順序是在將元素轉(zhuǎn)換為字符串,然后比較它們的UTF-16代碼單元值序列時(shí)構(gòu)建的。該方法\color{red}{改變原數(shù)組}。

arr.sort([compareFunction])

參數(shù):
compareFunction -- 可選。用來指定按某種順序進(jìn)行排列的函數(shù)。如果省略,元素按照轉(zhuǎn)換為的字符串的各個(gè)字符的Unicode位點(diǎn)進(jìn)行排序。
firstEl:第一個(gè)用于比較的元素。
secondEl:第二個(gè)用于比較的元素。

返回值:排序后的數(shù)組。請注意,數(shù)組已原地排序,并且不進(jìn)行復(fù)制。

如果指明了 compareFunction ,那么數(shù)組會(huì)按照調(diào)用該函數(shù)的返回值排序。即 a 和 b 是兩個(gè)將要被比較的元素:

  • 如果 compareFunction(a, b) 小于 0 ,那么 a 會(huì)被排列到 b 之前;
  • 如果 compareFunction(a, b) 等于 0 , a 和 b 的相對位置不變。備注: ECMAScript 標(biāo)準(zhǔn)并不保證這一行為,而且也不是所有瀏覽器都會(huì)遵守(例如 Mozilla 在 2003 年之前的版本);
  • 如果 compareFunction(a, b) 大于 0 , b 會(huì)被排列到 a 之前。
  • compareFunction(a, b) 必須總是對相同的輸入返回相同的比較結(jié)果,否則排序的結(jié)果將是不確定的。
//升序
var numbers = [4, 2, 5, 1, 3]; 
var num = numbers.sort((a, b) => a - b); 
console.log(numbers,num); // [1, 2, 3, 4, 5]  [1, 2, 3, 4, 5]
// 降序
var number1 = [4, 2, 5, 1, 3]; 
var num1 = number1.sort((a, b) => b - a); 
console.log(number1,num1); // [5, 4, 3, 2, 1]  [5, 4, 3, 2, 1]

var arr = ['s', 2,'d',23];
arr.sort();
console.log(arr); // [2, 23, "d", "s"] 按照ASCII 字符編碼排序。

27. slice()

返回被提取的數(shù)組對象,這一對象是一個(gè)由 begin 和 end 決定的原數(shù)組的淺拷貝,包括 begin,不包括end。原始數(shù)組不會(huì)被改變。

arr.slice([begin[, end]])

參數(shù):
begin -- 可選。提取起始處的索引,從該索引開始提取原數(shù)組元素,默認(rèn)為 0。

  • 如果該參數(shù)為負(fù)數(shù),則表示從原數(shù)組中的倒數(shù)第幾個(gè)元素開始提取,slice(-2) 表示提取原數(shù)組中的倒數(shù)第二個(gè)元素到最后一個(gè)元素(包含最后一個(gè)元素)。
  • 如果省略 begin,則 slice 從索引 0 開始。如果 begin 大于原數(shù)組的長度,則會(huì)返回空數(shù)組。

end -- 可選。提取終止處的索引,在該索引處結(jié)束提取原數(shù)組元素,默認(rèn)為數(shù)組的長度。slice 會(huì)提取原數(shù)組中索引從 begin 到 end 的所有元素(包含 begin,但不包含 end)。

  • slice(1,4) 會(huì)提取原數(shù)組中從第二個(gè)元素開始一直到第四個(gè)元素的所有元素 (索引為 1, 2, 3的元素)。
  • 如果該參數(shù)為負(fù)數(shù), 則它表示在原數(shù)組中的倒數(shù)第幾個(gè)元素結(jié)束抽取。 slice(-2,-1) 表示抽取了原數(shù)組中的倒數(shù)第二個(gè)元素到最后一個(gè)元素(不包含最后一個(gè)元素,也就是只有倒數(shù)第二個(gè)元素)。
  • 如果 end 被省略,則slice 會(huì)一直提取到原數(shù)組末尾。
  • 如果 end 大于數(shù)組的長度,slice 也會(huì)一直提取到原數(shù)組末尾。
var fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'];
var citrus = fruits.slice(1, 3);
// fruits contains ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
// citrus contains ['Orange','Lemon']

28. splice()

通過刪除替換現(xiàn)有元素或者原地添加新的元素來修改數(shù)組,并以數(shù)組形式返回被修改的內(nèi)容。此方法會(huì)\color{red}{改變原數(shù)組}。

array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

參數(shù):
start -- 指定修改的開始位置(從0計(jì)數(shù))。如果超出了數(shù)組的長度,則從數(shù)組末尾開始添加內(nèi)容;如果是負(fù)值,則表示從數(shù)組末位開始的第幾位(從-1計(jì)數(shù),這意味著-n是倒數(shù)第n個(gè)元素并且等價(jià)于array.length-n);如果負(fù)數(shù)的絕對值大于數(shù)組的長度,則表示開始位置為第0位。
deleteCount -- 可選。整數(shù),表示要移除的數(shù)組元素的個(gè)數(shù)。如果 deleteCount 大于 start 之后的元素的總數(shù),則從 start 后面的元素都將被刪除(含第 start 位)。
如果 deleteCount 被省略了,或者它的值大于等于array.length - start(也就是說,如果它大于或者等于start之后的所有元素的數(shù)量),那么start之后數(shù)組的所有元素都會(huì)被刪除。
如果 deleteCount 是 0 或者負(fù)數(shù),則不移除元素。這種情況下,至少應(yīng)添加一個(gè)新元素。
item1, item2, ... -- 可選。要添加進(jìn)數(shù)組的元素,從start 位置開始。如果不指定,則 splice() 將只刪除數(shù)組元素。

返回值:由被刪除的元素組成的一個(gè)數(shù)組。如果只刪除了一個(gè)元素,則返回只包含一個(gè)元素的數(shù)組。如果沒有刪除元素,則返回空數(shù)組。

//*************刪除
var myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon'];
var removed = myFish.splice(3, 1);
// myFish: ["angel", "clown", "drum", "sturgeon"]
// removed: ["mandarin"]

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(2);
// myFish: ["angel", "clown"]
// removed: ["mandarin", "sturgeon"]

//*************添加
var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(2, 0, 'drum', 'guitar');
// myFish: ["angel", "clown", "drum", "guitar", "mandarin", "sturgeon"]
// removed: []

//*************替換
var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(2, 1, 'drum', );
// myFish: ["angel", "clown", "drum", "sturgeon"]
// removed: ["mandarin"]

29. reduce()

對數(shù)組中的每個(gè)元素執(zhí)行一個(gè)由您提供的reducer函數(shù)(升序執(zhí)行),將其結(jié)果匯總為單個(gè)返回值。

語法:arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

reducer 函數(shù)接收4個(gè)參數(shù):

  • Accumulator (acc) (累計(jì)器) -- 累計(jì)回調(diào)的返回值; 它是上一次調(diào)用回調(diào)時(shí)返回的累積值,或initialValue(見于下方)。
  • Current Value (cur) (當(dāng)前值)
  • Current Index (idx) (當(dāng)前索引) -- 數(shù)組中正在處理的當(dāng)前元素的索引。 如果提供了initialValue,則起始索引號為0,否則為1。
  • Source Array (src) (源數(shù)組) -- 調(diào)用reduce()的數(shù)組
    reducer 函數(shù)的返回值分配給累計(jì)器,該返回值在數(shù)組的每個(gè)迭代中被記住,并最后成為最終的單個(gè)結(jié)果值。
    回調(diào)函數(shù)第一次執(zhí)行時(shí),accumulator 和currentValue的取值有兩種情況:如果調(diào)用reduce()時(shí)提供了initialValue,accumulator取值為initialValue,currentValue取數(shù)組中的第一個(gè)值;如果沒有提供 initialValue,那么accumulator取數(shù)組中的第一個(gè)值,currentValue取數(shù)組中的第二個(gè)值。
    注意:如果沒有提供initialValue,reduce 會(huì)從索引1的地方開始執(zhí)行 callback 方法,跳過第一個(gè)索引。如果提供initialValue,從索引0開始。
const arr = [13, 2, 23, 4];
const val = arr.reduce((acc, curVal, i) => {
  console.log(acc); // 13 13 23
  console.log(curVal); // 2 23 4
  console.log(i); // 1 2 3
  return Math.max(acc,curVal);
});
console.log(val); // 23 

30. toString()

返回一個(gè)字符串,表示指定的數(shù)組及其元素。

var array1 = [1, 2, 'a', '1a'];
console.log(array1.toString()); // 1,2,a,1a
console.log(array1); // [1, 2, "a", "1a"]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,996評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內(nèi)容