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的多表查询,分装到一个新的实体类中的一个方法
不知道是否还有其他方法实现,请高人指点. 如果涉及到多张表多字段查询,并且想利用查询出来的字段在界面层构建一个新的实体类,可以使用这种方法: 如果查询出来的多字段中,有多个字段的名字都相同(如想查询出 ...
随机推荐
- 数据库连接之SQL JDBC
数据库连接之SQL JDBC SQlServer的配置: 1).外围配置服务器中将远程连接设置为:同时使用TCP/IP和named pipes 2).点击该连接->属性->安全性-> ...
- hdu3622
hdu3622 题意 每回合给定两个坐标点,可以选择一个放置炸弹,自己决定炸弹的半径,问 n 个回合后,使炸弹半径最小值最大. 分析 存在对立关系:每回合只能选择一个地方放置炸弹.i 表示 第一个位置 ...
- android Activity Application Context 的区别
用了这么久的Context,对于Context究竟是个什么玩意一直不是很明白.看了网上十几篇文章的介绍 加上自己的理解总结一下.(自己想法,不对勿喷,不想照搬网上一些文字说法来糊弄自己,自己理解的就这 ...
- 设计模式的征途—8.桥接(Bridge)模式
在现实生活中,我们常常会用到两种或多种类型的笔,比如毛笔和蜡笔.假设我们需要大.中.小三种类型的画笔来绘制12中不同的颜色,如果我们使用蜡笔,需要准备3*12=36支.但如果使用毛笔的话,只需要提供3 ...
- CommonsChunkPlugin并不是分离第三方库的好办法(DllPlugin科学利用浏览器缓存)
webpack算是个磨人的小妖精了.之前一直站在glup阵营,使用browserify打包,发现webpack已经火到爆炸,深怕被社区遗落,赶紧拿起来把玩一下.本来只想玩一下的.尝试打包了以后,就想启 ...
- less函数
问题描述: 在编写页面时,有以下几种按钮: 这时候我们CSS代码毫无疑问写一个公共类,然后再为每个按钮增加独自的样式如下: HTML: <div class="common a&quo ...
- if中可以使用那些作为判断条件呢?
在所有编程语言中if是最长用的判断之一,但在js中到底哪些东西可以在if中式作为判断表达式呢? 例如如何几行,只是少了一个括号,真假就完全不同,到底表示什么含义呢 ? 1 2 3 4 5 6 7 8 ...
- go 基础语法
时间有限,简单记一些常用的,麻烦的不写了 定义变量:可以连续定义,也可以单个定义 var a int int类型 var a="ds" 默认string类型 a:=&qu ...
- 【原创】源码角度分析Android的消息机制系列(三)——ThreadLocal的工作原理
ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 先看Android源码(API24)中对ThreadLocal的定义: public class ThreadLocal<T> 即 ...
- [1] C# IS & AS讲解
c# 中 is和as 操作符是用来进行强制类型转换的 is : 检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,永远不会抛出异常 object o = new object(); if ( ...