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();

你可能感兴趣的:(JavaScript)