目錄算法
flatMap 首先使用映射函數映射每一個元素,而後將結果壓縮成一個新數組。它與 map 和 深度值1的 flat 幾乎相同,但 flatMap 一般在合併成一種方法的效率稍微高一些。api
values 返回一個新的 Array Iterator 對象,該對象包含數組每一個索引的值數組
上面列出了在js
數組當中常見的方法,下面在其中選取一些比較高頻和重要的方法來講明。函數
從一個相似數組或可迭代對象中建立一個新的數組實例。測試
語法:this
Array.from(arrayLike[, mapFn[, thisArg]])
參數:prototype
返回值:
一個新的數組實例。code
demo:對象
Array.from('foo'); // ["f", "o", "o"]
用於肯定傳遞的值是不是一個 Array。排序
語法:
Array.isArray(obj)
參數:
demo:
Array.isArray([1, 2, 3]); // true
用於合併兩個或多個數組。此方法不會更改現有數組,而是返回一個新數組。
語法:
var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
參數:
demo:
var array1 = ['a', 'b', 'c']; var array2 = ['d', 'e', 'f']; console.log(array1.concat(array2)); // expected output: Array ["a", "b", "c", "d", "e", "f"]
測試數組的全部元素是否都經過了指定函數的測試。
語法:
arr.every(callback[, thisArg])
參數:
demo:
function isBelowThreshold(currentValue) { return currentValue < 40; } var array1 = [1, 30, 39, 29, 10, 13]; console.log(array1.every(isBelowThreshold)); // expected output: true
用一個固定值填充一個數組中從起始索引到終止索引內的所有元素。不包括終止索引。
語法:
arr.fill(value[, start[, end]])
參數:
返回值:
修改後的數組。
建立一個新數組, 其包含經過所提供函數實現的測試的全部元素。
語法:
var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
參數:
返回值:
一個新的、由經過測試的元素組成的數組,若是沒有任何數組元素經過測試,則返回空數組。
demo:
var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present']; const result = words.filter(word => word.length > 6); console.log(result); // expected output: Array ["exuberant", "destruction", "present"]
返回數組中知足提供的測試函數的第一個元素的值。不然返回 undefined。
語法:
arr.find(callback[, thisArg])
參數:
demo:
var array1 = [5, 12, 8, 130, 44]; var found = array1.find(function(element) { return element > 10; }); console.log(found); // expected output: 12
對數組的每一個元素執行一次提供的函數。
語法:
arr.forEach(callback[, thisArg]);
參數:
demo:
var array1 = ['a', 'b', 'c']; array1.forEach(function(element) { console.log(element); }); // expected output: "a" // expected output: "b" // expected output: "c"
返回在數組中能夠找到一個給定元素的第一個索引,若是不存在,則返回-1。
語法:
arr.indexOf(searchElement) arr.indexOf(searchElement[, fromIndex = 0])
參數:
返回值:
首個被找到的元素在數組中的索引位置; 若沒有找到則返回 -1
demo:
var beasts = ['ant', 'bison', 'camel', 'duck', 'bison']; console.log(beasts.indexOf('bison')); // expected output: 1 // start from index 2 console.log(beasts.indexOf('bison', 2)); // expected output: 4 console.log(beasts.indexOf('giraffe')); // expected output: -1
將一個數組(或一個類數組對象)的全部元素鏈接成一個字符串並返回這個字符串。若是數組只有一個項目,那麼將返回該項目而不使用分隔符。
語法:
arr.join([separator])
參數:
返回值:
一個全部數組元素鏈接的字符串。若是 arr.length 爲0,則返回空字符串。
demo:
var elements = ['Fire', 'Air', 'Water']; console.log(elements.join()); // expected output: "Fire,Air,Water" console.log(elements.join('')); // expected output: "FireAirWater" console.log(elements.join('-')); // expected output: "Fire-Air-Water"
返回一個包含數組中每一個索引鍵的Array Iterator對象。
語法:
arr.keys()
返回值:
一個新的 Array 迭代器對象。
demo:
var array1 = ['a', 'b', 'c']; var iterator = array1.keys(); for (let key of iterator) { console.log(key); // expected output: 0 1 2 }
建立一個新數組,其結果是該數組中的每一個元素都調用一個提供的函數後返回的結果。
語法:
var new_array = arr.map(function callback(currentValue[, index[, array]]) { // Return element for new_array }[, thisArg])
參數:
返回值:
一個新數組,每一個元素都是回調函數的結果。
demo:
var array1 = [1, 4, 9, 16]; // pass a function to map const map1 = array1.map(x => x * 2); console.log(map1); // expected output: Array [2, 8, 18, 32]
從數組中刪除最後一個元素,並返回該元素的值。此方法更改數組的長度。
語法:
arr.pop()
返回值:
從數組中刪除的元素(當數組爲空時返回undefined)。
demo:
var plants = ['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato']; console.log(plants.pop()); // expected output: "tomato" console.log(plants); // expected output: Array ["broccoli", "cauliflower", "cabbage", "kale"] plants.pop(); console.log(plants); // expected output: Array ["broccoli", "cauliflower", "cabbage"]
對數組中的每一個元素執行一個由您提供的reducer函數(升序執行),將其結果彙總爲單個返回值。
語法:
arr.reduce(callback[, initialValue])
參數:
currentValue
數組中正在處理的元素。
currentIndex可選
數組中正在處理的當前元素的索引。 若是提供了initialValue,則起始索引號爲0,不然爲1。
array可選
調用reduce()的數組
返回值:
函數累計處理的結果.
demo:
const array1 = [1, 2, 3, 4]; const reducer = (accumulator, currentValue) => accumulator + currentValue; // 1 + 2 + 3 + 4 console.log(array1.reduce(reducer)); // expected output: 10 // 5 + 1 + 2 + 3 + 4 console.log(array1.reduce(reducer, 5)); // expected output: 15
將數組中元素的位置顛倒,並返回該數組。該方法會改變原數組。
語法:
arr.reverse()
demo :
var array1 = ['one', 'two', 'three']; console.log('array1: ', array1); // expected output: Array ['one', 'two', 'three'] var reversed = array1.reverse(); console.log('reversed: ', reversed); // expected output: Array ['three', 'two', 'one'] /* Careful: reverse is destructive. It also changes the original array */ console.log('array1: ', array1); // expected output: Array ['three', 'two', 'one']
返回一個新的數組對象,這一對象是一個由 begin和 end(不包括end)決定的原數組的淺拷貝。原始數組不會被改變。
語法:
arr.slice(); // [0, end] arr.slice(begin); // [begin, end] arr.slice(begin, end); // [begin, end)
參數:
返回值:
一個含有提取元素的新數組
demo:
var animals = ['ant', 'bison', 'camel', 'duck', 'elephant']; console.log(animals.slice(2)); // expected output: Array ["camel", "duck", "elephant"] console.log(animals.slice(2, 4)); // expected output: Array ["camel", "duck"] console.log(animals.slice(1, 5)); // expected output: Array ["bison", "camel", "duck", "elephant"]
測試是否至少有一個元素經過由提供的函數實現的測試。
語法:
arr.some(callback(element[, index[, array]])[, thisArg])
參數:
返回值:
若是回調函數返回任何數組元素的truthy值,則返回true;不然爲false。
demo:
var array = [1, 2, 3, 4, 5]; var even = function(element) { // checks whether an element is even return element % 2 === 0; }; console.log(array.some(even)); // expected output: true
用原地算法對數組的元素進行排序,並返回數組。排序算法如今是穩定的。默認排序順序是根據字符串Unicode碼點。
語法:
arr.sort([compareFunction])
參數:
返回值:
排序後的數組。請注意,數組已原地排序,而且不進行復制。
demo:
var months = ['March', 'Jan', 'Feb', 'Dec']; months.sort(); console.log(months); // expected output: Array ["Dec", "Feb", "Jan", "March"] var array1 = [1, 30, 4, 21, 100000]; array1.sort(); console.log(array1); // expected output: Array [1, 100000, 21, 30, 4]
經過刪除或替換現有元素或者原地添加新的元素來修改數組,並以數組形式返回被修改的內容。此方法會改變原數組。
語法:
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
參數:
start
指定修改的開始位置(從0計數)。若是超出了數組的長度,則從數組末尾開始添加內容;若是是負值,則表示從數組末位開始的第幾位(從-1計數,這意味着-n是倒數第n個元素而且等價於array.length-n);若是負數的絕對值大於數組的長度,則表示開始位置爲第0位。
deleteCount 可選
整數,表示要移除的數組元素的個數。
若是 deleteCount 大於 start 以後的元素的總數,則從 start 後面的元素都將被刪除(含第 start 位)。
若是 deleteCount 被省略了,或者它的值大於等於array.length - start(也就是說,若是它大於或者等於start以後的全部元素的數量),那麼start以後數組的全部元素都會被刪除。
若是 deleteCount 是 0 或者負數,則不移除元素。這種狀況下,至少應添加一個新元素。
item1, item2, ... 可選
要添加進數組的元素,從start 位置開始。若是不指定,則 splice() 將只刪除數組元素。
返回值:
由被刪除的元素組成的一個數組。若是隻刪除了一個元素,則返回只包含一個元素的數組。若是沒有刪除元素,則返回空數組。
demo:
var months = ['Jan', 'March', 'April', 'June']; months.splice(1, 0, 'Feb'); // inserts at index 1 console.log(months); // expected output: Array ['Jan', 'Feb', 'March', 'April', 'June'] months.splice(4, 1, 'May'); // replaces 1 element at index 4 console.log(months); // expected output: Array ['Jan', 'Feb', 'March', 'April', 'May']
具體方法介紹能夠訪問:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array