zoukankan      html  css  js  c++  java
  • 6个Javascript数组实用的原型扩展方法

    可以说数组在任何一门编程语言中都是一个极其重要的工具,在 JavaScript 也是如此,但遗憾的是原生 JavaScript 中对数组提供的方法少之又少,这在一定程度上降低了开发效率,如果你也为此所困扰,那么下面的代码对于缓解这样的尴尬局面也许能有一点帮助。

    在开始对数组进行原型扩展之前,非常有必要添加一个方法来验证一个变量是否为数组类型。该方法接受一个任意数据类型的变量作为参数,如果是数组则返回true,否则,你懂得。

    function isArray(a){
    	return a.constructor === Array ? true : false;
    }
    
    // Usage :
    var isArrayA = [3];
    var isArrayB = 3;
    var isArrayResultA = isArray(isArrayA); //true
    var isArrayResultB = isArray(isArrayB); //false
    
    深度拷贝

    这个方法非常简单,它返回一个深度拷贝的数组。如果你对此有所迷惑,请点击这里获得详细的解释。

    Array.prototype.copy = function(){
        return [].concat(this);
    };
    
    // Usage :
    var copyA = [0,1];
    var copyResult = copyA.copy();
    
    去除数组中的重复项

    方法 unique 将返回一个仅包含不重复元素的数组

    Array.prototype.unique = function(){
        var a = [];
        var l = this.length;
        for (var i = 0; i < l; i++) {
            for (var j = i + 1; j < l; j++) {
                if (this[i] === this[j]) 
                    j = ++i;
            }
            a.push(this[i]);
        }
        return a;
    };
    
    // Usage :
    var uniqueA = [1,2,3,3,5,5,3,7];
    var uniqueResult = uniqueA.unique();
    // uniqueResult = [1, 2, 5, 3, 7];
    
    获取数组中不相同的元素

    当一个数组调用 diff 方法,将得到这个数组中元素与其他数组中元素所不同的元素。有点拗口是吧?试试就知道是怎么回事了。

    Array.prototype.diff = function(){
        var a1 = this;
        var a = a2 = null;
        var n = 0;
        while (n < arguments.length) {
            a = [];
            a2 = arguments[n];
            var l = a1.length;
            var l2 = a2.length;
            var diff = true;
            for (var i = 0; i < l; i++) {
                for (var j = 0; j < l2; j++) {
                    if (a1[i] === a2[j]) {
                        diff = false;
                        break;
                    }
                }
                diff ? a.push(a1[i]) : diff = true;
            }
            a1 = a;
            n++;
        }
        return a.unique();
    };
    
    // Usage :
    var diffA = [1,2,3];
    var diffB = [2,3,4];
    var diffResult = diffA.diff(diffB);
    // diff = [1];
    
    合并数组

    这个方法将传入的数组进行合并,并返回合并后的新数组

    Array.prototype.union = function(){
        var a = [].concat(this);
        var l = arguments.length;
        for (var i = 0; i < l; i++) {
            a = a.concat(arguments[i]);
        }
        return a;
    };
    
    // Usage :
    var unionA = [1,2,3];
    var unionB = [2,3,4];
    var unionResult = unionA.union(unionB);
    // unionResult = [1, 2, 3, 2, 3, 4]
    
    交集

    intersect 将返回传入几的数组中相同的元素

    Array.prototype.intersect = function(){
        if (!arguments.length) 
            return [];
        var a1 = this;
        var a = a2 = null;
        var n = 0;
        while (n < arguments.length) {
            a = [];
            a2 = arguments[n];
            var l = a1.length;
            var l2 = a2.length;
            for (var i = 0; i < l; i++) {
                for (var j = 0; j < l2; j++) {
                    if (a1[i] === a2[j]) 
                        a.push(a1[i]);
                }
            }
            a1 = a;
            n++;
        }
        return a.unique();
    };
    
    // Usage :
    var intersectA = [1,2,3];
    var intersectB = [2,3,4];
    var intersectC = [3,4,5];
    var intersectResult = intersectA.intersect(intersectB,intersectC);
    // intersectResult = [3];
    
    随机化

    对一个数组进行随机排序,返回值为 undefined

    Array.prototype.randomize = function(){
            this.sort(function(){
                return ((Math.random() * 3) | 0) - 1;
            });
    };
    
    // Usage :
    var randomizeA = [4,7,3,7,3];
    randomizeA.randomize();
    

    下面的链接包含了本文的全部代码和用例。欢迎下载

    代码及Demo

  • 相关阅读:
    团队开发冲刺第二十天
    团队开发冲刺第十九天
    第十六周进度总结
    学期课后个人总结
    用户场景分析
    第十五周进度总结
    对正在使用的输入法进行评价
    java中实现客户姓名添加和显示
    指定查找区间,查找学生姓名并显示是否修改成功
    linux下如何修改文件的权限chmod
  • 原文地址:https://www.cnblogs.com/myphoebe/p/2226333.html
Copyright © 2011-2022 走看看