實(shí)例詳解ECMAScript5中新增的Array方法
ECMAScript5 給出了一系列新的API接口,這些接口在新的瀏覽器中大部分是被支持的,IE9,Chrome,F(xiàn)irFor都支持,也有少量API不是所有瀏覽器都支持,以下內(nèi)容僅介紹大部分被支持的API。利用新的API我們可以設(shè)計(jì)出非常靠譜的類,而且還能保持原有的javaScript的風(fēng)格。
ECMAScript5標(biāo)準(zhǔn)發(fā)布于2009年12月3日,它帶來(lái)了一些新的,改善現(xiàn)有的Array數(shù)組操作的方法。(注意兼容性)
在ES5中,一共有9個(gè)Array方法:http://kangax.github.io/compat-table/es5/
Array.prototype.indexOf Array.prototype.lastIndexOf Array.prototype.every Array.prototype.some Array.prototype.forEach Array.prototype.map Array.prototype.filter Array.prototype.reduce Array.prototype.reduceRight
下面列舉了其中的7種方法,前5種方法很常見(jiàn),很多開(kāi)發(fā)者都會(huì)用到:
1、indexOf()
indexOf()方法返回在該數(shù)組中第一個(gè)找到的元素位置,如果它不存在則返回-1。
var arr = ['apple', 'orange', 'pear'], found = false; // 未使用 for (var i = 0, l = arr.length; i < l; i++) { if (arr[i] === 'orange') { found = true; } } console.log("found:", found); // ==> found: true // 使用后 console.log("found:", arr.indexOf("orange") != -1); // ==> found: true
2、filter()
該filter()方法創(chuàng)建一個(gè)新的匹配過(guò)濾條件的數(shù)組。
不用 filter() 時(shí):
var arr=[{"name":"apple", "count": 2},{"name":"orange", "count": 5},{"name":"pear", "count": 3},{"name":"orange", "count": 16},] var newArr = []; for (var i = 0; i < arr.length; i++) { if (arr[i].name === "orange") { newArr.push(arr[i]); } } console.log("Filter results:", newArr);
用了 filter():
var newArr = arr.filter(function(item) { return item.name === "orange"; }); console.log("Filter results:", newArr);
3、forEach()
forEach為每個(gè)元素執(zhí)行對(duì)應(yīng)的方法,是用來(lái)替換for循環(huán)的。
var arr = [1, 2, 3, 4, 5, 6, 7, 8]; // 使用for循環(huán) for (var i = 0, l = arr.length; i < l; i++) { console.log(arr[i]); } // 使用forEach循環(huán) arr.forEach(function(item, index) { console.log(item); });
4、map()
map()對(duì)數(shù)組的每個(gè)元素進(jìn)行一定操作(映射)后,會(huì)返回一個(gè)新的數(shù)組。
var oldArr = [{first_name: "Colin",last_name: "Toh"}, {first_name: "Addy",last_name: "Osmani"}, {first_name: "Yehuda",last_name: "Katz"}]; function getNewArr() { var newArr = []; for (var i = 0; i < oldArr.length; i++) { var item = oldArr[i]; item.full_name = [item.first_name, item.last_name].join(" "); newArr[i] = item; } return newArr; } var personName = getNewArr(); personName.forEach(function(item, index) { console.log(item); }) /****輸出結(jié)果: Object {first_name: "Colin", last_name: "Toh", full_name: "Colin Toh"} Object {first_name: "Addy", last_name: "Osmani", full_name: "Addy Osmani"} Object {first_name: "Yehuda", last_name: "Katz", full_name: "Yehuda Katz"} ****/
使用map()方法:
function getNewArr() { return oldArr.map(function(item, index) { item.full_name = [item.first_name, item.last_name].join(" "); return item; }) } var personName = getNewArr(); personName.forEach(function(item, index) { console.log(item); }) /****輸出結(jié)果: Object {first_name: "Colin", last_name: "Toh", full_name: "Colin Toh"} Object {first_name: "Addy", last_name: "Osmani", full_name: "Addy Osmani"} Object {first_name: "Yehuda", last_name: "Katz", full_name: "Yehuda Katz"} ****/
5、reduce()
reduce()可以實(shí)現(xiàn)一個(gè)累加器的功能,將數(shù)組的每個(gè)值(從左到右)將其降低到一個(gè)值。也可以理解為:讓數(shù)組中的前項(xiàng)和后項(xiàng)做某種運(yùn)算,并累積最終值;
場(chǎng)景: 統(tǒng)計(jì)一個(gè)數(shù)組中有多少個(gè)不重復(fù)的單詞;
var arr = ["apple", "orange", "apple", "orange", "pear", "orange"]; function getWordCnt() { var obj = {}; for (var i = 0; i < arr.length; i++) { var item = arr[i]; obj[item] = (obj[item] + 1) || 1; } return obj; } console.log(getWordCnt()); // 輸出結(jié)果: // Object {apple: 2, orange: 3, pear: 1}
使用reduce()后:
var arr = ["apple", "orange", "apple", "orange", "pear", "orange"]; function getWordCnt() { return arr.reduce(function(prev, next) { prev[next] = (prev[next] + 1) || 1; return prev; }, {}); } console.log(getWordCnt()); // 輸出結(jié)果: // Object {apple: 2, orange: 3, pear: 1}
6 、array.some(callback[, thisObject]);callback : 函數(shù)用來(lái)測(cè)試某些元素。
thisObject: 對(duì)象作為該執(zhí)行回調(diào)時(shí)使用。
檢測(cè)數(shù)組中是否有某些項(xiàng)符合條件;
var scores = [45, 60, 70, 65, 95, 85]; var current = 60; function passed(score) { return score > current; } console.log(scores.some(passed)); // == > true
7、array.every(callback[, thisObject]);callback : 函數(shù)用來(lái)測(cè)試每個(gè)元素。thisObject: 對(duì)象作為該執(zhí)行回調(diào)時(shí)使用。
檢測(cè)數(shù)組中每一項(xiàng)是否符合條件;
var scores = [45, 60, 70, 65, 95, 85]; var current = 60; function passed(score) { return score > current; } console.log(scores.every(passed)); // == > false
通過(guò)以上實(shí)例給大家介紹了ECMAScript5中新增的Array方法,希望對(duì)大家有所幫助!
相關(guān)文章
原生js實(shí)現(xiàn)無(wú)限循環(huán)輪播圖效果
本文主要介紹了原生js實(shí)現(xiàn)無(wú)限循環(huán)輪播圖效果的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01關(guān)于UTF-8的客戶端用AJAX方式獲取GB2312的服務(wù)器端亂碼問(wèn)題的解決辦法
客戶端是UTF-8編碼,這也是現(xiàn)在大家公認(rèn)的標(biāo)準(zhǔn)編碼在這種情況下,實(shí)用AJAX異步獲取GB2312編碼的服務(wù)器端信息時(shí),不可避免的要遇到漢字亂碼問(wèn)題2010-11-11JavaScript訪問(wèn)字符串中單個(gè)字符的兩種方法
這篇文章主要介紹了JavaScript訪問(wèn)字符串中單個(gè)字符的兩種方法,本文分別講解了索引方式訪問(wèn)單個(gè)字符串、charAt()函數(shù)訪問(wèn)單個(gè)字符以及兩種方式的不同,需要的朋友可以參考下2015-07-07JavaScript樹(shù)的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法示例
這篇文章主要介紹了JavaScript樹(shù)的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法,結(jié)合實(shí)例形式分析了JavaScript樹(shù)的深度優(yōu)先遍歷、廣度優(yōu)先遍歷遞歸與非遞歸相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-07-07200行代碼實(shí)現(xiàn)blockchain 區(qū)塊鏈實(shí)例詳解
這篇文章主要介紹了200行代碼實(shí)現(xiàn)blockchain 區(qū)塊鏈的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2018-03-0320個(gè)必會(huì)的JavaScript面試題(小結(jié))
這篇文章主要介紹了20個(gè)必會(huì)的JavaScript面試題(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-07-07JS實(shí)現(xiàn)移動(dòng)端按首字母檢索城市列表附源碼下載
我們常見(jiàn)的手機(jī)通訊錄或微信通訊錄,聯(lián)系人信息是按字母順序排列的列表,通過(guò)點(diǎn)擊右側(cè)的字母,會(huì)迅速定位檢索到首字母對(duì)應(yīng)的聯(lián)系人。下面通過(guò)本文給大家分享JS實(shí)現(xiàn)移動(dòng)端按首字母檢索城市列表功能,需要的的朋友參考下吧2017-07-07