输出都在控制台中:

<script type="text/javascript">
function Set() { //这是一个构造函数
this.values = {}; //集合数据保存在对象的属性里
this.n = 0; //集合中值的个数
this.add.apply( this, arguments ); //把所有参数都添加到这个集合中
} //将每个参数都填加到集合中
Set.prototype.add = function(){
console.log("参数的长度为:"+arguments.length);
for( var i = 0; i<arguments.length ; i++ ){ //遍历每个参数
var val = arguments[ i ]; //待添加到集合中的值
//console.log(val);
var str = Set._v2s(val); //把它转化为字符串
if( !this.values.hasOwnProperty(str) ){ //如果不在集合中
this.values[str] = val; //将字符串和值对应起来
this.n++; //集合中的计数加一
}
}
return this; //支持链式方法调用
}; //从集合删除元素,这些元素由参数指定
Set.prototype.remove = function(){
for(var i = 0; i<arguments.length ; i++){ //遍历每个参数
var str = Set._v2s(arguments[i]); //将字符串和值对应起来
if(this.values.hasOwnProperty(str)){ //如果它存在集合中
delete this.values[str]; //删除它
this.n--; //集合中值的计数减一
}
}
return this;
}; //如果集合中包含这个值,则返回true;否则返回false
Set.prototype.contains = function(value){
return this.values.hasOwnProperty(Set._v2s(value));
}; //返回集合的大小
Set.prototype.size = function(){
return this.n;
}; //遍历集合中的所有元素,在指定的上下文中调用f
Set.prototype.foreach = function(f,context){
for( var s in this.values){ //遍历集合中的所有字符串
if(this.values.hasOwnProperty(s)) //忽略继承的属性
f.call(context,this.values[s]); //调用f,传入value
}
}; //这个一个内部函数,用以将任意js值和唯一的字符串对应起来
Set._v2s = function(val){
//console.log(typeof val);
switch(val){
case undefined: return "u"; //特殊的原始值
case null: return "n";
case true: return "t"; //特殊的原始值
case false: return "f"; //特殊的原始值
default: switch(typeof val){
case "number": return '#'+val; //数字带有#前缀
case "string": return '"'+val; //字符串带有"前缀
default : return "@"+objectId(val); //objs and funcs get @
}
} //对任意对象来说,都会返回一个字符串
//正对不同的对象,这个函数会返回不同字符串
//对于同一个对象的多次调用,总是返回相同的字符串
//为了做到这一点,它给o创建了一个属性,在ES5中,这个属性是不可枚举且是只读的
function objectId(o){
var prop = "|**objectid|"; //私有属性,用以存放id
if(!o.hasOwnProperty(prop)) //如果队形没有id
o[prop] = Set._v2s.next++; //将下一个值赋给它
return o[prop]; //返回这个id
}
}; Set._v2s.next = 100; //设置初始id的值 //实例测试:
var s = new Set(1,2,4,4,"aaaaa",5,6,{a:1,b:3},6,7);
console.log(s.values);
console.log(s.size()); </script>

JavaScript一个集合的运算类的更多相关文章

  1. JavaScript一个cookie存储的类

    所有输出都在浏览器的控制台中 <script type="text/javascript"> /** * cookieStorage.js * 本类实现像localSt ...

  2. 定义一个Collection接口类型的变量,引用一个Set集合的实现类,实现添加单个元素, 添加另一个集合,删除元素,判断集合中是否包含一个元素, 判断是否为空,清除集合, 返回集合里元素的个数等常用操作。

    package com.lanxi.demo2; import java.util.HashSet; import java.util.Iterator; import java.util.Set; ...

  3. JavaScript数据结构——集合的实现与应用

    与数学中的集合概念类似,集合由一组无序的元素组成,且集合中的每个元素都是唯一存在的.可以回顾一下中学数学中集合的概念,我们这里所要定义的集合也具有空集(即集合的内容为空).交集.并集.差集.子集的特性 ...

  4. JAVA基础学习之final关键字、遍历集合、日期类对象的使用、Math类对象的使用、Runtime类对象的使用、时间对象Date(两个日期相减)(5)

    1.final关键字和.net中的const关键字一样,是常量的修饰符,但是final还可以修饰类.方法.写法规范:常量所有字母都大写,多个单词中间用 "_"连接. 2.遍历集合A ...

  5. Python全栈之路3--set集合--三元运算--深浅拷贝--初识函数

    一.上节课的重点回顾: 1.类名加括号其实就是执行类的__init__方法: 2.int a.创建方式 n1 = 123 #根据int类创建了一个对象 n2 = int(123) #根据int类创建一 ...

  6. JavaScript数据结构——集合、字典和散列表

    集合.字典和散列表都可以存储不重复的值. 在集合中,我们感兴趣的是每个值本身,并把它当作主要元素.在字典和散列表中,我们用 [键,值] 的形式来存储数据. 集合(Set 类):[值,值]对,是一组由无 ...

  7. Java中的集合和常用类

    Java中的常用类: ▪ Object类 ▪ Math类 ▪ String类和StringBuffer类(字符串) ▪ 8种基本类型所对应的包装类 ▪ java.util包中的类——Date类 Obj ...

  8. JavaScript实现集合与字典

    JavaScript实现集合与字典 一.集合结构 1.1.简介 集合比较常见的实现方式是哈希表,这里使用JavaScript的Object类进行封装. 集合通常是由一组无序的.不能重复的元素构成. 数 ...

  9. Hibernate的多表查询,分装到一个新的实体类中的一个方法

    不知道是否还有其他方法实现,请高人指点. 如果涉及到多张表多字段查询,并且想利用查询出来的字段在界面层构建一个新的实体类,可以使用这种方法: 如果查询出来的多字段中,有多个字段的名字都相同(如想查询出 ...

随机推荐

  1. cas4.2以下取消https

    deployerConfigContext.xml增加参数p:requireSecure="false" <bean class="org.jasig.cas.au ...

  2. Lock(二)解决Lock问题

    本文介绍通过Toad.EM及SQL语句来处理数据库产生的锁.在这之前需要对v$lock和v$session这两个数据字典有一定的了解. (一)使用Toad处理锁 (1)使用Toad的session b ...

  3. 编写原生的Node.js模块

    导语:当Javascript的性能遭遇瓶颈,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...

  4. php笔记一

    一.Login登陆验证步骤: 1.赋值,用$_POST将id和password传递给loginProcess.php登陆验证页面. 2.建立数据库连接 $conn=mysql_connect($hos ...

  5. Spring自动化装配bean

    1. 场景 用CD(Compact disc)和CD播放器(CDPlayer)阐述DI(依赖注入). 如果不将CD插入(注入)到CDPlayer中,那么CDPlayer其实没有太大的用处,所以,可以这 ...

  6. Redis数据类型之Hash(二)

    前言: Redis hash是一个String类型的field和value的映射表.添加.删除操作复杂度平均为O(1),为什么是平均呢?因为Hash的内部结构包含zipmap和hash两种.hash特 ...

  7. RabbitMQ安装配置和基于EasyNetQ驱动的基础使用

    一.RabbitMQ基本概念和原理 1.AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计. 2.Ra ...

  8. 使用Windows Server 2012+ 搭建VPN 简单 高效 稳定

    前几天,在机缘巧合之下,买到了一台性能配置一般的腾讯云服务器(香港的),因为性能比较差,没啥太大用途,就想着试试搭建一个VPN,后来,经过多次尝试和查资料,总结出了一套几乎100%成功的教程,现在拿来 ...

  9. 事件总线(Event Bus)知多少

    源码路径:Github-EventBus 简书同步链接 1. 引言 事件总线这个概念对你来说可能很陌生,但提到观察者(发布-订阅)模式,你也许就很熟悉.事件总线是对发布-订阅模式的一种实现.它是一种集 ...

  10. OkHttp基本使用

    OkHttp介绍 Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient,HttpURLConnection相对来说比HttpClient难用,googl ...