- slice()對應(yīng)string的substring(),它截取數(shù)組的部分元素,返回一個新的數(shù)組:
var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; arr.slice(0, 3); // 從索引0開始,到索引3結(jié)束,但不包括索引3: ['A', 'B', 'C'] arr.slice(3); // 從索引3開始到結(jié)束: ['D', 'E', 'F', 'G']
注意到:slice()的參數(shù)包含開始索引,不包含結(jié)束索引 如果不給slice()傳遞參數(shù),將從頭到尾截取所有元素,利用這一點(diǎn),我們很容易復(fù)制一個數(shù)組:
var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; var aCopy = arr.slice(); aCopy; // ['A', 'B', 'C', 'D', 'E', 'F', 'G'] aCopy === arr; // false
2 . push()和pop() , push()想數(shù)組末尾加若干元素,pop()刪除數(shù)組最后一個元素,并返回該元素:
var arr = [1, 2]; arr.push('A', 'B'); // 返回Array新的長度: 4 arr; // [1, 2, 'A', 'B'] arr.pop(); // pop()返回'B' arr; // [1, 2, 'A'] arr.pop(); arr.pop(); arr.pop(); // 連續(xù)pop 3次 arr; // [] arr.pop(); // 空數(shù)組繼續(xù)pop不會報錯伙窃,而是返回undefined arr; // []
3.unshift()和shift(), unshift()向Array頭部插入若干元素, shift()則是刪除數(shù)組的第一個元素:
var arr = [1, 2]; arr.unshift('A', 'B'); // 返回Array新的長度: 4 arr; // ['A', 'B', 1, 2] arr.shift(); // 'A' arr; // ['B', 1, 2] arr.shift(); arr.shift(); arr.shift(); // 連續(xù)shift 3次 arr; // [] arr.shift(); // 空數(shù)組繼續(xù)shift不會報錯咨跌,而是返回undefined arr; // []
4.sort(), 對當(dāng)前Array排序,它會直接修改當(dāng)前Array的元素位置,直接調(diào)用時,按默認(rèn)的順序排序:
var arr = ['B', 'C', 'A']; arr.sort(); arr; // ['A', 'B', 'C']
5.reverse(),把整個的Array元素反轉(zhuǎn):
var arr = ['one', 'two', 'three']; arr.reverse(); arr; //['three', 'two', 'one']
6.splice()方法是修改數(shù)組的"萬能方法",它可以從制定索引的位置開始,刪除若干元素,再從該位置添加若干元素:
//刪除又添加
var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 從索引2開始刪除3個元素,然后再添加兩個元素: arr.splice(2, 3, 'Google', 'Facebook')
; // 返回刪除的元素 ['Yahoo', 'AOL', 'Excite']
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook' , 'Oracle']
// 只刪除,不添加:
arr.splice(2, 2); // ['Google', 'Facebook'] arr; // ['Microsoft', 'Apple', 'Oracle']
// 只添加,不刪除:
arr.splice(2, 0, 'Google', 'Facebook')
; // 返回[],因為沒有刪除任何元素
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
7.concat()把當(dāng)前數(shù)組與另一個數(shù)組鏈接起來,返回一個新的數(shù)組:
var arr = ['A', 'B', 'C']; var added = arr.concat([1, 2, 3]); added; // ['A', 'B', 'C', 1, 2, 3] arr; // ['A', 'B', 'C']
- 實際上concat()可以接收任意多個元素和數(shù)組,并自動把數(shù)組拆開,然后全部添加到新的數(shù)組里:*
var arr = ['A', 'B', 'C']; arr.concat(1, 2, [3, 4]); // ['A', 'B', 'C', 1, 2, 3, 4]
8.join()將當(dāng)前數(shù)組按制定的字符串連接起來,然后返回連接后的字符串:
var arr = ['A', 'B', 'C', 1, 2, 3]; arr.join('-'); // 'A-B-C-1-2-3'
如果Array的元素不是字符串型酥,將自動轉(zhuǎn)換為字符串后再連接
9.find() ,找到匹配的就返回該匹配的元素
//最右邊的barcode 是前面已經(jīng)給出的
const cartItem = cartItems.find(cartItem => cartItem.item.barcode === barcode);cartItems 是一個數(shù)組掏膏,它里面的每個元素我們自己把它叫 cartItem(也可以是別的原杂,因為是虛有的) 挨决, 每一個元素是一個 key :item请祖,value :內(nèi)容是一系列包含barcode 的鍵值對,只要找到固定的barcode脖祈,即 cartItem.item.barcode===barcode為true 肆捕,該find()函數(shù)就返回 該元素cartItem
- map(),改變數(shù)組的每個元素
使用數(shù)組的map()方法: 比如:array = [1,2,3]; let arr = array.map(i => i 2) ; // i表示數(shù)組array 的每一個元素, 這樣 i 的值聚會被改變?yōu)?i2 結(jié)果: arr = [2, 4, 6];
代碼中的實例:
let buildReceiptItems = (cartItems, promotions) => {return cartItems.map(cartItem => {let promotionType = getPromotionType(cartItem.item.barcode, promotions);let {subtotal, saved} = discount(cartItem, promotionType);return {cartItem, subtotal, saved};})};
代碼解釋: 1. map函數(shù)中的參數(shù)cartItem 表示 數(shù)組cartITems 的每一個元素,該cartItem 會被map函數(shù)中的
返回值 {cartItme,subtotal,saved} 替換 2.ES新特性: 當(dāng)一個對象的 key 和 value 完全一樣的時候,可以只寫一個 比如:return {cartItem:cartItem , subtotal : subtotal, saved : saved} 等價于 return { cartItem, subtotal, saved };
11.includes()
ES6 數(shù)組的新方法 includes() ,比 find() 簡單,只是去找一個數(shù)組里面有沒包含一個指定的元素 盖高,
function getPromotionType(barcode, promotions) {const promotion = promotions.find(promotion => promotion.barcodes.incluses(barcode));return promotion ? promotion.type : undefined;};
12.some() 判斷數(shù)組師是否包含一個元素慎陵,返回的是一個true or false
- arr.some(callback*[, thisArg])
some
為數(shù)組中的每一個元素執(zhí)行一次 callback
函數(shù),直到找到一個使得 callback 返回一個“真值”(即可轉(zhuǎn)換為布爾值 true 的值)喻奥。如果找到了這樣一個值席纽,some
將會立即返回 true
。否則撞蚕,some
返回 false
润梯。callback
只會在那些”有值“索引上被調(diào)用,不會在那些被刪除或從來未被賦值的索引上調(diào)用。some
被調(diào)用時不會改變數(shù)組
var number = [2, 5, 8, 1, 4].some( element => element >= 10 ) ; // passed is true var number = [12, 5, 8, 1, 4].some( element => element >= 10 ); // passed is true
const promotion = promotions.find(promotion => promotion.barcodes.some(b => b === barcode));
13.filter() 一個數(shù)組變成另外一個數(shù)組
- arr.filter(callback[, thisArg])
callback
用來測試數(shù)組的每個元素的函數(shù)纺铭。調(diào)用時使用參數(shù) (element, index, array)抒和。返回true表示保留該元素(通過測試),false則不保留彤蔽。filter
為數(shù)組中的每個元素調(diào)用一次 callback
函數(shù)摧莽,并利用所有使得 callback
返回 true或 等價于 true 的值 的元素 創(chuàng)建一個新數(shù)組。callback
只會在已經(jīng)賦值的索引上被調(diào)用顿痪,對于那些已經(jīng)被刪除或者從未被賦值的索引不會被調(diào)用镊辕。那些沒有通過callback
測試的元素會被跳過,不會被包含在新數(shù)組中蚁袭。* 例子:篩選排除掉所有的小值 征懈, 下例使用 filter
創(chuàng)建了一個新數(shù)組,該數(shù)組的元素由原數(shù)組中值大于 10 的元素組成揩悄。**
var filtered = [12, 5, 8, 130, 44].filter( number =>
element >= 10
); // filtered is [12, 130, 44]
14 . reduce() 數(shù)組 arr = [1,2,3,4] 求數(shù)組的累加求和
var arr = [1,2,3,4];
arr.reduce( function ( pre,cur ) { return pre + cur } ) ; // return 10
prev: 第一項的值或者上一次疊加的結(jié)果
cur: 當(dāng)前會參與疊加的項
15.every()
16.hasOwnProperty()有沒有某一屬性
如果數(shù)組postData[i]是一個對象卖哎,就可以去判斷它有沒有‘comments’屬性:postData[i].hasOwnProperty("comments")
數(shù)組的方法學(xué)習(xí)(查詢)網(wǎng)址: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/filter