實例詳解ECMAScript5中新增的Array方法

字號:


    這篇文章主要介紹了實例詳解ECMAScript5中新增的Array方法的相關資料,需要的朋友可以參考下
    ECMAScript5 給出了一系列新的API接口,這些接口在新的瀏覽器中大部分是被支持的,IE9,Chrome,F(xiàn)irFor都支持,也有少量API不是所有瀏覽器都支持,以下內容僅介紹大部分被支持的API。利用新的API我們可以設計出非常靠譜的類,而且還能保持原有的javaScript的風格。
    ECMAScript5標準發(fā)布于2009年12月3日,它帶來了一些新的,改善現(xiàn)有的Array數(shù)組操作的方法。(注意兼容性)
    在ES5中,一共有9個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種方法很常見,很多開發(fā)者都會用到:
    1、indexOf()
    indexOf()方法返回在該數(shù)組中第一個找到的元素位置,如果它不存在則返回-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)建一個新的匹配過濾條件的數(shù)組。
    不用 filter() 時:
    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為每個元素執(zhí)行對應的方法,是用來替換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()對數(shù)組的每個元素進行一定操作(映射)后,會返回一個新的數(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);
    })
    /****輸出結果:
    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);
    })
    /****輸出結果:
    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()可以實現(xiàn)一個累加器的功能,將數(shù)組的每個值(從左到右)將其降低到一個值。也可以理解為:讓數(shù)組中的前項和后項做某種運算,并累積最終值;
    場景: 統(tǒng)計一個數(shù)組中有多少個不重復的單詞;
    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());
    // 輸出結果:
    // 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());
    // 輸出結果:
    // Object {apple: 2, orange: 3, pear: 1}
    6 、array.some(callback[, thisObject]);callback : 函數(shù)用來測試某些元素。
    thisObject: 對象作為該執(zhí)行回調時使用。
    檢測數(shù)組中是否有某些項符合條件;
    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ù)用來測試每個元素。thisObject: 對象作為該執(zhí)行回調時使用。
    檢測數(shù)組中每一項是否符合條件;
    var scores = [45, 60, 70, 65, 95, 85];
    var current = 60;
    function passed(score) {
    return score > current;
    }
    console.log(scores.every(passed)); // == > false
    通過以上實例給大家介紹了ECMAScript5中新增的Array方法,希望對大家有所幫助!