javascript有list类型吗?

摘要:JavaScript中是不原生支持List类型的,所以大家在想要使用的时候,都会去自己封装一个类,然后去实现它。这个方法实现满足了基本的API,而且是在JS Array类型的基础上扩展的,也可以在它上面使用Array的方法

JavaScript中是不原生支持List类型的,所以大家在想要使用的时候,都会去自己封装一个类,然后去实现它。

这个方法实现满足了基本的API,而且是在JS Array类型的基础上扩展的,也可以在它上面使用Array的方法,另外一大 亮点 是可以直接引用length属性获得集合的元素个数。


代码实现

//兼容IE8-,为Array原型添加indexOf方法;
if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (item) {
        var index = -1;
        for (var i = 0; i < this.length; i++) {
            if (this[i] === item) {
                index = i;
                break;
            }
        }
        return index;
    }
}

//List类实现
var List = function (args) {
    var self = this;

    if (List.isArray(args)) {
        self = args;
    }
    self.constructor = List;
    //向集合追加新元素
    self.add = function (item) {
        self.push(item);
        return self;
    };
    //在指定索引处插入新元素
    self.insert = function (index, item) {
        self.splice(index, 0, item);
        return self;
    };
    //删除元素,仅删除第一个索引处的元素
    self.remove = function (item) {
        var index = self.indexOf(item);
        if (index != -1) {
            return self.splice(index, 1)[0];
        } else {
            return undefined;
        }
    };
    //删除元素,如果元素在多个索引处存在,则全部删除
    self.removeAll = function (item) {
        var result = [];
        var removeItem = undefined;
        do {
            removeItem = self.remove(item);
            if (removeItem !== undefined) {
                result.push(removeItem);
            }
        } while (removeItem !== undefined);
        return result;
    };
    //根据index删除元素
    self.removeAt = function (index) {
        if (index != -1) {
            return self.splice(index, 1)[0];
        } else {
            return undefined;
        }
    };
    //判断元素是否包含在集合中
    self.contains = function (item) {
        return self.indexOf(item) != -1;
    };
    //清空集合的所有元素
    self.clear = function () {
        return new List(self.splice(0, self.length));
    };
    self.size = function () {
        return self.length;
    };

    if (List.isArray(args)) {
        return self;
    } else if (arguments.length > 0) {
        for (var i = 0; i < arguments.length; i++) {
            self.add(arguments[i]);
        }
    }
};
List.isArray = Array.isArray || function (target) {
    return Object.prototype.toString.call(target) === "[object Array]";
};

/*下面这段代码是关键,它设定了List类的原型是Array的原型(继承关系),所以List类也同样拥有Array的特征*/
List.prototype = Array.prototype;

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_7836