JavaScript一个集合的运算类
输出都在控制台中:
<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一个集合的运算类的更多相关文章
- JavaScript一个cookie存储的类
所有输出都在浏览器的控制台中 <script type="text/javascript"> /** * cookieStorage.js * 本类实现像localSt ...
- 定义一个Collection接口类型的变量,引用一个Set集合的实现类,实现添加单个元素, 添加另一个集合,删除元素,判断集合中是否包含一个元素, 判断是否为空,清除集合, 返回集合里元素的个数等常用操作。
package com.lanxi.demo2; import java.util.HashSet; import java.util.Iterator; import java.util.Set; ...
- JavaScript数据结构——集合的实现与应用
与数学中的集合概念类似,集合由一组无序的元素组成,且集合中的每个元素都是唯一存在的.可以回顾一下中学数学中集合的概念,我们这里所要定义的集合也具有空集(即集合的内容为空).交集.并集.差集.子集的特性 ...
- JAVA基础学习之final关键字、遍历集合、日期类对象的使用、Math类对象的使用、Runtime类对象的使用、时间对象Date(两个日期相减)(5)
1.final关键字和.net中的const关键字一样,是常量的修饰符,但是final还可以修饰类.方法.写法规范:常量所有字母都大写,多个单词中间用 "_"连接. 2.遍历集合A ...
- Python全栈之路3--set集合--三元运算--深浅拷贝--初识函数
一.上节课的重点回顾: 1.类名加括号其实就是执行类的__init__方法: 2.int a.创建方式 n1 = 123 #根据int类创建了一个对象 n2 = int(123) #根据int类创建一 ...
- JavaScript数据结构——集合、字典和散列表
集合.字典和散列表都可以存储不重复的值. 在集合中,我们感兴趣的是每个值本身,并把它当作主要元素.在字典和散列表中,我们用 [键,值] 的形式来存储数据. 集合(Set 类):[值,值]对,是一组由无 ...
- Java中的集合和常用类
Java中的常用类: ▪ Object类 ▪ Math类 ▪ String类和StringBuffer类(字符串) ▪ 8种基本类型所对应的包装类 ▪ java.util包中的类——Date类 Obj ...
- JavaScript实现集合与字典
JavaScript实现集合与字典 一.集合结构 1.1.简介 集合比较常见的实现方式是哈希表,这里使用JavaScript的Object类进行封装. 集合通常是由一组无序的.不能重复的元素构成. 数 ...
- Hibernate的多表查询,分装到一个新的实体类中的一个方法
不知道是否还有其他方法实现,请高人指点. 如果涉及到多张表多字段查询,并且想利用查询出来的字段在界面层构建一个新的实体类,可以使用这种方法: 如果查询出来的多字段中,有多个字段的名字都相同(如想查询出 ...
随机推荐
- Error getting nested result map values for 'company'. Cause: java.sql.SQLException: Invalid value for getInt() - 'NFHK188'
我今天遇到一个我不解的问题,是mybatis多对一关系查询出问题了,但是我自己还是解决了,在网上也查过那个错误,可是找不到我想要的.不知道你们遇到过没有,我接下来分享给大家.希望我这个第一篇博客能帮助 ...
- 每天一个JS 小demo之日历制作。主要知识点:日期函数
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Windows下用Composer引入官方GitHub扩展包
Windows下用Composer引入官方GitHub扩展包 1. 当你打开威武RC4版本的链接的时候,往下拉你可以看到这个,然后你要做的就是想到,百度Composer,看看是个什么鬼,别想太多,跟着 ...
- 《如莲春天》Java开发框架
关于 如莲者,净洁如莲之意,希望打造一个简洁的系统框架.系统主要采用Spring相关技术,故取名:如莲春天. 如莲春天,包括一套系统界面.一个权限管理系统.一个CURD代码生成模块.一些基础模块 ...
- 平面之后3D成主流?VR全景表示不服!——全景智慧城市常诚
目前很多人对VR全景这个词汇没有明确的概念,更没有人做过全面的研究,VR全景是什么?VR全景可以做什么?不同于我们经常听到的VR色情,全景智慧城市常诚今天就来为各位做一个系统全面的介绍,深入了解之后, ...
- php注册登录源代码
php注册登录源代码 链接数据库<?php$conn=mysql_connect('localhost','root','');mysql_select_db('ht',$conn);mysql ...
- dede系统自定义变量删除方法
之前添加了个联系电话的系统变量,忘记写描述,结果就显示个冒号,很难看.这样的就要删除了重来,那么织梦怎么删除添加的变量呢?其实很简单.两种方法: 第一种:执行SQL语句.在织梦后台执行-系统-SQL命 ...
- 如何判断img标签是否有src属性
前几天,写一个小项目,需要判断img标签是否有src属性,想了半天,只能想到用jq实现,如下: if($(".img").attr("src")==undefi ...
- 通过LOGBACK实现每个类、包或自定义级别
项实现LOGBACK对每个包或者类或者通过自定义级别的方式实现自定义输出的日志进入制定的文件.查阅了很多资料,都没有找到行之有效的解决方案,直到看到了这篇文章http://www.360doc.com ...
- 【FFmpeg】FFmpeg常用基本命令
1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流 ffmpeg -i input_file -acod ...