/**
* each是一个集合迭代函数,它接受一个函数作为参数和一组可选的参数
* 这个迭代函数依次将集合的每一个元素和可选参数用函数进行计算,并将计算得的结果集返回
{%example
<script> <BR>var a = [1,2,3,4].each(function(x){return x > 2 ? x : null}); <BR>var b = [1,2,3,4].each(function(x){return x < 0 ? x : null}); <BR>alert(a); <BR>alert(b); <BR></script>
%}
* @param {Function} fn 进行迭代判定的函数
* @param more ... 零个或多个可选的用户自定义参数
* @returns {Array} 结果集,如果没有结果,返回空集
*/
Array.prototype.each = function(fn){
fn = fn || Function.K;
var a = [];
var args = Array.prototype.slice.call(arguments, 1);
for(var i = 0; i var res = fn.apply(this,[this[i],i].concat(args));
if(res != null) a.push(res);
}
return a;
};
/**
* 得到一个数组不重复的元素集合
* 唯一化一个数组
* @returns {Array} 由不重复元素构成的数组
*/
Array.prototype.uniquelize = function(){
var ra = new Array();
for(var i = 0; i if(!ra.contains(this[i])){
ra.push(this[i]);
}
}
return ra;
};
/**
* 求两个集合的补集
{%example
<script> <BR>var a = [1,2,3,4]; <BR>var b = [3,4,5,6]; <BR>alert(Array.complement(a,b)); <BR></script>
%}
* @param {Array} a 集合A
* @param {Array} b 集合B
* @returns {Array} 两个集合的补集
*/
Array.complement = function(a, b){
return Array.minus(Array.union(a, b),Array.intersect(a, b));
};
/**
* 求两个集合的交集
{%example
<script> <BR>var a = [1,2,3,4]; <BR>var b = [3,4,5,6]; <BR>alert(Array.intersect(a,b)); <BR></script>
%}
* @param {Array} a 集合A
* @param {Array} b 集合B
* @returns {Array} 两个集合的交集
*/
Array.intersect = function(a, b){
return a.uniquelize().each(function(o){return b.contains(o) ? o : null});
};
/**
* 求两个集合的差集
{%example
<script> <BR>var a = [1,2,3,4]; <BR>var b = [3,4,5,6]; <BR>alert(Array.minus(a,b)); <BR></script>
%}
* @param {Array} a 集合A
* @param {Array} b 集合B
* @returns {Array} 两个集合的差集
*/
Array.minus = function(a, b){
return a.uniquelize().each(function(o){return b.contains(o) ? null : o});
};
/**
* 求两个集合的并集
{%example
<script> <BR>var a = [1,2,3,4]; <BR>var b = [3,4,5,6]; <BR>alert(Array.union(a,b)); <BR></script>
%}
* @param {Array} a 集合A
* @param {Array} b 集合B
* @returns {Array} 两个集合的并集
*/
Array.union = function(a, b){
return a.concat(b).uniquelize();
};
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn