在ES6中新增了不少有利於快速開發的內容,好比咱們的箭頭函數、解構賦值、拓展剩餘運算符、class建立類、模版字符串......等等;javascript
同時數組和對象也新增了一些較爲經常使用的方法,因爲以前寫的數組中的16種經常使用方法說過還有一些方法後續補充,但一直到如今尚未兌現承諾,今天小芝麻就先把欠下的還上😄java
接收一個函數做爲累加器,數組中的每一個值(從左到右)開始縮減(是個數遞減,不是值),最終計算爲一個值。數組
(通常用於求和;計數,本次返回的結果會做爲下一次的上一次進行計算。)app
callback
(必須):給數組中的每個元素依次執行傳入的回調函數,不包括數組中被刪除或從未被賦值的元素;
reduce
的數組。(可選)callback
函數時的第一個參數的值。
reduce
將報錯。accumulator
和currentValue
的取值有兩種狀況:若是調用reduce()
時提供了initialValue
,accumulator
取值爲initialValue
,currentValue
取數組中的第一個值;initialValue
,那麼accumulator
取數組中的第一個值,currentValue
取數組中的第二個值。initialValue
,reduce
會從索引1
的地方開始執行 callback
方法,跳過第一個索引。若是提供initialValue
,從索引0
開始。函數累計處理的結果函數
不改變post
數組.reduce(callback(accumulator, currentValue, 【index, array】), 【initialValue】)測試
- 用【】表示能夠省略
[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array){
return accumulator + currentValue;
});
複製代碼
callback 被調用四次,每次調用的參數和返回值以下表:ui
reduce
返回的值就是最後一次回調返回值
10
。
[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array){
return accumulator + currentValue;
}, 10 );
複製代碼
callback 被調用五次,每次調用的參數和返回值以下表: this
要累加對象數組中包含的值,必須提供初始值,以便各項正確經過你的函數。spa
var initialValue = 0;
var sum = [{x: 1}, {x:2}, {x:3}].reduce(
(accumulator, currentValue) => accumulator + currentValue.x
,initialValue
);
console.log(sum) // logs 6
複製代碼
var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
function(a, b) {
return a.concat(b);
},
[]
);
// flattened is [0, 1, 2, 3, 4, 5]
複製代碼
關於reduce暫且說這些,更多內容可參考MDN,Array.prototype.reduce(),裏面寫的很詳細,小芝麻也是參考的MDN
整理的😄
返回數組中條件成立項,把不成立的過濾掉,若是回調函數返回true,就把這一項放到新數組中返回
一個新的、由經過測試的元素組成的數組,若是沒有任何數組元素經過測試,則返回空數組。
不改變原數組;
var newArray = 數組.filter(callback(element, 【index, array】), 【thisArg】)
- 用【】表示能夠省略
filter
遍歷的元素範圍在第一次調用 callback
以前就已經肯定了。filter
以後被添加到數組中的元素不會被 filter
遍歷到。callback
的值是 filter
遍歷到它們那一刻的值。下例使用 filter
建立了一個新數組,該數組的元素由原數組中值大於 10
的元素組成。
function isBigEnough(element) {
return element >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]
複製代碼
下例使用 filter() 根據搜索條件來過濾數組內容。
var fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];
/** * 基於搜索條件(查詢)的數組篩選項 */
function filterItems(query) {
return fruits.filter(function(el) {
return el.toLowerCase().indexOf(query.toLowerCase()) > -1;
})
}
console.log(filterItems('ap')); // ['apple', 'grapes']
console.log(filterItems('an')); // ['banana', 'mango', 'orange']
複製代碼
參考自:MDN,Array.prototype.filter()
對應的findIndex
方法,與find
用法都相同,只不過返回的第一次知足條件哪一項的索引,就不單獨介紹啦😄
從左到右循環,直到找到知足條件的那一項,把這項返回;若是沒有找到,那麼返回undefined;
數組中第一個知足所提供測試函數的元素的值,不然返回 undefined。
不改變原數組
數組.find(callback(element, 【index, array】), 【thisArg】)
- 用【】表示能夠省略
callback
函數時會肯定元素的索引範圍,所以在 find
方法開始執行以後添加到數組的新元素將不會被 callback
函數訪問到。callback
函數訪問到的元素的值被callback
函數所改變,那麼當callback
函數訪問到它時,它的值是所訪問到的當前值。undefined
了。下面的例子是從一個數組中尋找質數(若是找不到質數則返回undefined
)
function isPrime(element, index, array) {
var start = 2;
while (start <= Math.sqrt(element)) {
if (element % start++ < 1) { return false; } } return element > 1; } console.log([4, 6, 8, 12].find(isPrime)); // undefined, 沒有找到 console.log([4, 5, 8, 12].find(isPrime)); // 5 複製代碼
參考自:MDN,Array.prototype.find()
在數組中只要有一項條件成立就返回true
,若是都不成立就返回false
不改變原數組
數組.some(callback(element, 【index, array】), 【thisArg】)
- 用【】表示能夠省略
some()
遍歷的元素的範圍在第一次調用 callback
. 前就已經肯定了。some()
後被添加到數組中的值不會被 callback
訪問到。callback
改變了,則其傳遞給 callback
的值是 some()
訪問到它那一刻的值。用法基本與some
相同,與some
的區別就是:some
是找到一個符合的就返回true
,every
是找到一個不符合的就返回false
數組的每項都必須知足回調函數的條件(返回true),只要有一個不知足,就返回false
找到第一個返回false的值;就再也不向後繼續查找;返回一個布爾值;若是全部的成員的回調都返回true,這個結果就是true
按照一個可指定的深度遞歸遍歷數組,並將全部元素與遍歷到的子數組中的元素合併爲一個新數組返回。
一個包含數組與子數組中全部元素的新數組。
不改變原數組
var newArray = 數組.flat([depth])
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
,可展開任意深度的嵌套數組//使用 Infinity,可展開任意深度的嵌套數組
var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity);
// => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
複製代碼
flat()
方法會移除數組中的空項:var arr4 = [1, 2, , 4, 5];
arr4.flat();
// => [1, 2, 4, 5]
複製代碼
參考自:MDN
數組的方法補充就到這裏了,還有一些不是很經常使用的方法,沒有在這裏一一例舉啦~~