zoukankan      html  css  js  c++  java
  • ECMAScript5中新增的Array方法实例详解

    ECMAScript5标准发布于2009年12月3日,它带来了一些新的,改善现有的Array数组操作的方法。(注意兼容性)

    在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种方法很常见,很多开发者都会用到:

    1、indexOf()

    indexOf()方法返回在该数组中第一个找到的元素位置,如果它不存在则返回-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()方法创建一个新的匹配过滤条件的数组。

    不用 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为每个元素执行对应的方法,是用来替换for循环的。

    var arr = [1, 2, 3, 4, 5, 6, 7, 8];
    // 使用for循环
    for (var i = 0, l = arr.length; i < l; i++) {
        console.log(arr[i]);
    }
    
    // 使用forEach循环
    arr.forEach(function(item, index) {
        console.log(item);
    });

    4、map()

    map()对数组的每个元素进行一定操作(映射)后,会返回一个新的数组。

    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()可以实现一个累加器的功能,将数组的每个值(从左到右)将其降低到一个值。也可以理解为:让数组中的前项和后项做某种运算,并累积最终值;

    场景: 统计一个数组中有多少个不重复的单词;

    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 : 函数用来测试某些元素。thisObject: 对象作为该执行回调时使用。

    检测数组中是否有某些项符合条件;

    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 : 函数用来测试每个元素。thisObject: 对象作为该执行回调时使用。

    检测数组中每一项是否符合条件;

    var scores = [45, 60, 70, 65, 95, 85];
    var current = 60;
    
    function passed(score) {
        return score > current;
    }
    console.log(scores.every(passed)); // == > false

  • 相关阅读:
    Linux strip
    有趣的BUG
    GDB watch std::string size
    Redis Cluster Lua
    Double Buffer
    Yarn架构
    天池公交客流预测比赛
    hashmap,ConcurrentHashMap与hashtable的区别
    fail-fast和fail-safe
    常见机器学习算法优缺点
  • 原文地址:https://www.cnblogs.com/jone-chen/p/5355086.html
Copyright © 2011-2022 走看看