您的位置:首页 > Web前端 > JavaScript

6个Javascript数组实用的原型扩展方法

2011-10-27 12:18 796 查看
可以说数组在任何一门编程语言中都是一个极其重要的工具,在 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: