`
Blackbaby
  • 浏览: 185025 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

javascript数组扩展

阅读更多
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

分享到:
评论

相关推荐

    extarray:Javascript 数组扩展

    ##Javascript 数组扩展 向 js 数组添加了一些函数 array.min() / array.max() :返回值数组的最小值/最大值 array.minBy(prop) / array.maxBy(prop) :返回具有属性prop的对象的最小值/最大值 array.toArray(prop) :...

    List.js:一个 javascript 数组扩展库

    一个 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数组的扩展实现代码集合

    本文将详细介绍一个JavaScript数组扩展的代码集合,其中包括了数组删除元素、随机排序、数字排序、获取最大最小值、查找元素首次出现位置以及去除重复项等功能。 #### 二、Array.prototype.del - 删除数组中的某个...

    javascript数组有哪些常见的方法_javascript数组有什么方法.docx

    ### JavaScript 数组常见方法详解 #### 一、前言 JavaScript 中的数组是一种非常重要的数据结构,用于存储一系列有序的数据。本文将详细介绍 JavaScript 数组的一些常用方法及其应用场景,帮助开发者更好地理解和...

    Javascript数组操作整理.rar

    本资料"Javascript数组操作整理"聚焦于JavaScript中的数组操作,旨在帮助开发者更好地理解和掌握相关知识。 1. 创建数组: JavaScript提供了多种创建数组的方式,如字面量语法`var arr = [元素1, 元素2, ...]`,或...

    浅谈Javascript数组(推举)_.docx

    总的来说,JavaScript数组的灵活性允许开发者在同一个数组中存储不同类型的数据,并且可以根据需要动态扩展或收缩数组的大小。然而,这也带来了一些潜在的问题,如稀疏数组和不同浏览器间的兼容性问题,需要开发者在...

    Javascript数组Array操作整理[定义].pdf

    总的来说,理解并熟练掌握JavaScript数组的`length`属性及其动态调整特性,以及如何利用`prototype`来扩展对象功能,是成为一名优秀的JavaScript开发者必备的基础。在软件开发过程中,灵活运用这些知识能够提高代码...

    js数组相减简单示例【删除a数组所有与b数组相同元素】

    扩展阅读中提及的专题,例如《JavaScript数组操作技巧总结》、《JavaScript遍历算法与技巧总结》等,为读者提供了更多的学习资源。通过这些资源,读者可以更加全面地掌握JavaScript中数组操作的多种技巧和方法,从而...

    Javascript数组循环遍历之forEach详解

    ### Javascript数组循环遍历之forEach详解 #### 1. JavaScript数组循环遍历基础 在JavaScript中,循环遍历数组是常见的操作,传统的方式是使用for循环,例如: ```javascript var count = arr.length; for(var i ...

    给Javascript数组插入一条记录的代码.docx

    在给定的文档中,我们看到了一个扩展了JavaScript数组原型的`insert()`方法,用于在数组的特定位置插入值。下面将详细介绍这个方法以及与之相关的其他数组操作。 首先,让我们解析提供的`insert()`方法代码: ```...

    编程语言中列表/数组扩展方法详解-Python与JavaScript/C++实例

    内容概要:本文详细介绍了在不同编程语言中(主要是 Python、JavaScript 和 C++),如何使用 append() 或相似的方法对列表、数组和字符串进行扩展。Python 中的 append() 方法专门用于列表,而集合使用 add() 来实现...

    JavaScript数组对象Array.pdf

    2. `prototype`属性:这是所有JavaScript对象都具有的属性,用于扩展对象的方法。例如,你可以通过`Array.prototype`自定义一个方法,使得所有的数组实例都能使用这个新方法。以下是一个示例,定义了一个名为`outAll...

    javascript数组

    这意味着即使初始长度设为某个值,也可以向数组添加更多元素,此时数组的实际长度会根据实际元素数量进行扩展。 ##### 2. 数组元素的访问 可以通过索引来访问数组中的元素,索引从 0 开始。 - **读取元素**:`var ...

    javascript框架设计读书笔记之数组的扩展与修复

    通过以上介绍,我们可以看到JavaScript数组扩展与修复中包含的丰富知识和技巧。在实际开发中,掌握这些知识能够帮助开发者编写出更加健壮和高效的代码。需要注意的是,以上代码实现可能会因为环境不同而需要进行适当...

    collection-js:对本机javascript数组的简单扩展,添加了分页方法

    **JavaScript数组扩展与分页实现** 在JavaScript中,原生数组对象提供了丰富的操作方法,如push、pop、shift、unshift、slice等,但并未内置针对大数据量分页处理的功能。`collection-js`是一个小巧的库,其目标是...

    JavaScript数组详解

    JavaScript数组详解知识点: 1. 数组概念: 在JavaScript中,数组是一种数据结构,用于在单个变量名下存储一系列的值。数组可以包含各种类型的数据,包括数字、字符串、对象等。数组中的每个元素都有一个数字下标(或...

    JavaScript 数组中最大最小值

    本文将详细地介绍如何获取JavaScript数组中的最大值和最小值,包括使用原型方法扩展Array对象,以及利用Math对象的方法。 首先,使用原型方法扩展Array对象是一种直接对数组原型添加方法来获取最大值或最小值的方式...

    JavaScript实现Array(数组)和Map

    JavaScript数组可以包含任意类型的值,包括数字、字符串、对象等。此外,JavaScript提供了一系列内置方法来操作数组,如push()用于在数组末尾添加元素,pop()用于移除末尾元素,slice()用于提取数组的一部分,concat...

    有趣的JavaScript数组长度问题代码说明

    如果之前的最大索引为2,那么添加了上述代码后,length属性将变为4,因为JavaScript数组会扩展其索引范围。 3. 越界数组(outofboundsarray)问题 JavaScript数组的动态特性使得程序员在编写代码时需要更加小心,...

Global site tag (gtag.js) - Google Analytics