Object.prototype.equals = function (x) {
if (!x) {
return false;
}
for (var p in this) {
if (typeof(x[p]) == 'undefined') {
return false;
}
}
for (var p in this) {
if (this[p]) {
switch (typeof(this[p])) {
case 'object':
if (!this[p].equals(x[p])) {
return false
};
break;
case 'function':
if (typeof(x[p]) == 'undefined' || (p != 'equals' && this[p].toString() != x[p].toString())) {
return false;
};
break;
default:
if (this[p] != x[p]) {
return false;
}
}
} else {
if (x[p]) {
return false;
}
}
}
for (p in x) {
if (typeof(this[p]) == 'undefined') {
return false;
}
}
return true;
}
Array.prototype.contains=function(a){
var b=this;
for(var i=0;i<b.length;i++){
if(a.equals(b[i])) return true;
}
return false;
}
/**
* each是一个集合迭代函数,它接受一个函数作为参数和一组可选的参数
* 这个迭代函数依次将集合的每一个元素和可选参数用函数进行计算,并将计算得的结果集返回
{%example
<script>
var a = [1,2,3,4].each(function(x){return x > 2 ? x : null});
var b = [1,2,3,4].each(function(x){return x < 0 ? x : null});
alert(a);
alert(b);
</script>
%}
* @param {Function} fn 进行迭代判定的函数
* @param more ... 零个或多个可选的用户自定义参数
* @returns {Array} 结果集,如果没有结果,返回空集
*/
Array.prototype.each = function(fn){
var a = [];
var args = Array.prototype.slice.call(arguments, 1);
for(var i = 0; i < this.length; i++){
var res = fn.apply(this,[this[i],i].concat(args));
if(res != null) a.push(res);
}
return a;
};
/**
* 得到一个数组不重复的元素集合<br/>
* 唯一化一个数组
* @returns {Array} 由不重复元素构成的数组
*/
Array.prototype.uniquelize = function(){
var ra = new Array();
for(var i = 0; i < this.length; i ++){
if(!ra.contains(this[i])){
ra.push(this[i]);
}
}
return ra;
};
/**
* 求两个集合的补集
{%example
<script>
var a = [1,2,3,4];
var b = [3,4,5,6];
alert(Array.complement(a,b));
</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>
var a = [1,2,3,4];
var b = [3,4,5,6];
alert(Array.intersect(a,b));
</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>
var a = [1,2,3,4];
var b = [3,4,5,6];
alert(Array.minus(a,b));
</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>
var a = [1,2,3,4];
var b = [3,4,5,6];
alert(Array.union(a,b));
</script>
%}
* @param {Array} a 集合A
* @param {Array} b 集合B
* @returns {Array} 两个集合的并集
*/
Array.union = function(a, b){
return a.concat(b).uniquelize();
};
原文链接:http://bbs.51js.com/viewthread.php?tid=88229
分享到:
相关推荐
##Javascript 数组扩展 向 js 数组添加了一些函数 array.min() / array.max() :返回值数组的最小值/最大值 array.minBy(prop) / array.maxBy(prop) :返回具有属性prop的对象的最小值/最大值 array.toArray(prop) :...
一个 javascript 数组扩展库 演示 // Create a new empty list var list = new List ( ) ; // Create a new list based on an array var arr = [ 1 , 2 , 3 ] ; var list = new List ( arr ) ; // Add a value to ...
本文将详细介绍一个JavaScript数组扩展的代码集合,其中包括了数组删除元素、随机排序、数字排序、获取最大最小值、查找元素首次出现位置以及去除重复项等功能。 #### 二、Array.prototype.del - 删除数组中的某个...
### JavaScript 数组常见方法详解 #### 一、前言 JavaScript 中的数组是一种非常重要的数据结构,用于存储一系列有序的数据。本文将详细介绍 JavaScript 数组的一些常用方法及其应用场景,帮助开发者更好地理解和...
本资料"Javascript数组操作整理"聚焦于JavaScript中的数组操作,旨在帮助开发者更好地理解和掌握相关知识。 1. 创建数组: JavaScript提供了多种创建数组的方式,如字面量语法`var arr = [元素1, 元素2, ...]`,或...
总的来说,JavaScript数组的灵活性允许开发者在同一个数组中存储不同类型的数据,并且可以根据需要动态扩展或收缩数组的大小。然而,这也带来了一些潜在的问题,如稀疏数组和不同浏览器间的兼容性问题,需要开发者在...
总的来说,理解并熟练掌握JavaScript数组的`length`属性及其动态调整特性,以及如何利用`prototype`来扩展对象功能,是成为一名优秀的JavaScript开发者必备的基础。在软件开发过程中,灵活运用这些知识能够提高代码...
扩展阅读中提及的专题,例如《JavaScript数组操作技巧总结》、《JavaScript遍历算法与技巧总结》等,为读者提供了更多的学习资源。通过这些资源,读者可以更加全面地掌握JavaScript中数组操作的多种技巧和方法,从而...
### Javascript数组循环遍历之forEach详解 #### 1. JavaScript数组循环遍历基础 在JavaScript中,循环遍历数组是常见的操作,传统的方式是使用for循环,例如: ```javascript var count = arr.length; for(var i ...
在给定的文档中,我们看到了一个扩展了JavaScript数组原型的`insert()`方法,用于在数组的特定位置插入值。下面将详细介绍这个方法以及与之相关的其他数组操作。 首先,让我们解析提供的`insert()`方法代码: ```...
内容概要:本文详细介绍了在不同编程语言中(主要是 Python、JavaScript 和 C++),如何使用 append() 或相似的方法对列表、数组和字符串进行扩展。Python 中的 append() 方法专门用于列表,而集合使用 add() 来实现...
2. `prototype`属性:这是所有JavaScript对象都具有的属性,用于扩展对象的方法。例如,你可以通过`Array.prototype`自定义一个方法,使得所有的数组实例都能使用这个新方法。以下是一个示例,定义了一个名为`outAll...
这意味着即使初始长度设为某个值,也可以向数组添加更多元素,此时数组的实际长度会根据实际元素数量进行扩展。 ##### 2. 数组元素的访问 可以通过索引来访问数组中的元素,索引从 0 开始。 - **读取元素**:`var ...
通过以上介绍,我们可以看到JavaScript数组扩展与修复中包含的丰富知识和技巧。在实际开发中,掌握这些知识能够帮助开发者编写出更加健壮和高效的代码。需要注意的是,以上代码实现可能会因为环境不同而需要进行适当...
**JavaScript数组扩展与分页实现** 在JavaScript中,原生数组对象提供了丰富的操作方法,如push、pop、shift、unshift、slice等,但并未内置针对大数据量分页处理的功能。`collection-js`是一个小巧的库,其目标是...
JavaScript数组详解知识点: 1. 数组概念: 在JavaScript中,数组是一种数据结构,用于在单个变量名下存储一系列的值。数组可以包含各种类型的数据,包括数字、字符串、对象等。数组中的每个元素都有一个数字下标(或...
本文将详细地介绍如何获取JavaScript数组中的最大值和最小值,包括使用原型方法扩展Array对象,以及利用Math对象的方法。 首先,使用原型方法扩展Array对象是一种直接对数组原型添加方法来获取最大值或最小值的方式...
JavaScript数组可以包含任意类型的值,包括数字、字符串、对象等。此外,JavaScript提供了一系列内置方法来操作数组,如push()用于在数组末尾添加元素,pop()用于移除末尾元素,slice()用于提取数组的一部分,concat...
如果之前的最大索引为2,那么添加了上述代码后,length属性将变为4,因为JavaScript数组会扩展其索引范围。 3. 越界数组(outofboundsarray)问题 JavaScript数组的动态特性使得程序员在编写代码时需要更加小心,...