JavaScript增强数组函数之map

jQuery $.map()方法适用于将数组或对象每个项目新阵列映射到一个新数组的函数,javascript 1.6 提供了一个名为map的高阶函数,方法类似。
语法

var m = array.map(callback[, thisObject]);

参数说明

callback: 要对每个数组元素执行的回调函数。
thisObject : 在执行回调函数时定义的this对象。

功能说明

对数组中的每个元素都执行一次指定的函数(callback),并且以每次返回的结果为元素创建一个新数组。它只对数组中的非空元素执行指定的函数,没有赋值或者已经删除的元素将被忽略。

回调函数可以有三个参数:当前元素,当前元素的索引和当前的数组对象。

如参数 thisObject 被传递进来,它将被当做回调函数(callback)内部的 this 对象,如果没有传递或者为null,那么将会使用全局对象。

map 不会改变原有数组,记住:只有在回调函数执行前传入的数组元素才有效,在回调函数开始执行后才添加的元素将被忽略,而在回调函数开始执行到最后一个元素这一期间,数组元素被删除或者被更改的,将以回调函数访问到该元素的时间为准,被删除的元素将被忽略。
在不支持此属性的浏览器下可以用下面的代码:

// 说明:Javascript Array 的 map() 方法
// 整理:http://www.hujuntao.com
if (!Array.prototype.map) {
    Array.prototype.map = function (callback, arg) {
        var value, key, ret = [],
            i = 0,
            length = this.length,
            isArray = length !== undefined && typeof length === "number" && ((length > 0 && this[0] && this[length - 1]) || length === 0 || typeof this === "array");
        if (isArray) {
            for (; i < length; i++) {
                value = callback(this[i], i, arg);
                if (value != null) {
                    ret[ret.length] = value;
                }
            }
        } else {
            for (key in this) {
                value = callback(this[key], key ,arg);
                if (value != null) {
                    ret[ret.length] = value;
                }
            }
        }
        return ret.concat.apply([], ret);
    }
}

示例

//demo
var users = [
      {name : "csser", "email" : "csser@email.com"},
      {name : "xianlihua", "email" : "xianlihua@email.com"}
   ];
var emails = users.map(function(user){return user.email;});
alert(emails); // ["csser@email.com", "xianlihua@email.com"]
alert(map(users,function(user){return user.email;})); // ["csser@email.com", "xianlihua@email.com"]

“JavaScript增强数组函数之map”的一个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注