博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我对JS集合的简单学习
阅读量:6821 次
发布时间:2019-06-26

本文共 2910 字,大约阅读时间需要 9 分钟。

我对集合的学习

第一步知道相关概念

集合是由一组无序且唯一的项组成的,在ES6中已经实现了类似的Set类。

function Set() {    var items = {}; //items就是集合}

第二步实现相关操作方法

首先实现has(value)方法,判断值是否在集合中,返回布尔值。因为集合是不允许重复元素存在的,其他方法调用这个方法判断是否值已存在。

this.has = function(value) {    return value in items; //in操作符};

还有另外一种实现方法,hasOwnProperty()方法返回表明一个对象是否具有特定属性的布尔值。

this.has = function(value) {    return items.hasOwnProperty(value);};

接下来实现add()方法,向集合中添加一个新的项。

this.add = function(value) {    if(!this.has(value)) { //判断要添加的元素是否已经存在        items[value] = value; //注意同时作为键和值保存,有利于查找这个值        return true;    }    return false; //添加的元素已经存在,不再添加};

接下来实现remove()方法,从集合中移除一个值。

this.remove = function(value) {    if(this.has(value)) {        delete items[value]; //删除对象的属性        return true;    }    return false;};

接下来实现clear()方法,移除集合所有值。

this.clear = function() {    items = {}; //空对象重新赋值给它};

接下来实现size()方法,返回集合中有多少项。

  • 第一种实现方法,使用一个length变量

  • 第二种实现方法,使用Object.keys()

this.size = function() {    return Object.keys(items).length; //返回一个对象的所有可枚举的属性名组成的数组,但不包括原型中的属性,也不能保证按照顺序输出属性名};
  • 第三种实现方法,手动提取items对象的每一个属性,记录个数

this.size = function() {    var count = 0;    for(var prop in items) { //遍历items的所有属性        if(items.hasOwnProperty(prop)) { //防止计数时计算到原型的属性            ++count;        }    }    return count;};

实现values()方法,返回所有值组成的数组。

this.values = function() {    return Object.keys(items); //获得键也就获得了值(因为他们一样啊)};

第三步简单使用Set类

var set = new Set();set.add(1); console.log(set.values()); //['1']console.log(set.has(1)); //trueconsole.log(set.size()); //1set.add(2);console.log(set.values()); //['1', '2']set.remove(1); console.log(set.values()); //['2']

第四步操作集合

  • 并集:两个集合,返回一个包含两个集合中所有元素的新集合

可以用来合并两个元素,而且保证了单一性。

this.union = function(otherSet) {    var unionSet = new Set(); //并集结果    var values = this.values();    for(var i = 0; i < values.length; i++) { //遍历第一个集合全部放到新集合        unionSet.add(values[i]);    }    values = otherSet.values();    for(var i = 0; i < values.length; i++) { //遍历第二个集合全部放到新集合,使用了add方法保证了单一性        unionSet.add(values[i]);    }    return unionSet;}
  • 交集:两个集合,返回一个包含两个集合中共有元素的新集合

可以用来取两者共有的部分。

this.intersection = function(otherSet) {    var intersectionSet = new Set();    var values = this.values();    for(var i = 0; i < values.length; i++) {        if(otherSet.has(values[i])) {            intersectionSet.add(values[i])            }    }    return intersectionSet;}
  • 差集:元素存在于A且不存在于B中

this.difference = functiong(otherSet) {    var differenceSet = new Set();    var values = this.values();    for(var i = 0; i < values.length; i++) { //遍历了A        if(!otherSet.has(values[i])) {             differenceSet.add(values[i]);        }    }    return differenceSet;}
  • 子集:A中的每一个元素都在B中

this.subset = function(otherSet) {    if(this.size() > otherSet.size()) return false;    var values = this.values();    for(var i = 0; i < values.length; i++) {        if(!otherSet.has(values[i])) { //只要有一个A中的元素不在B中,返回false            return false;            }    }    return true;}

转载地址:http://oulzl.baihongyu.com/

你可能感兴趣的文章
jsp页面表单的遍历要怎么写
查看>>
循环引用,看我就对了
查看>>
uwp通用应用重写列表面板控件
查看>>
软件工程——第一周作业
查看>>
浅谈 Python 的 with 语句
查看>>
与Web设计师约会的十个好处
查看>>
PHP实例——判断字符串是否为UTF-8编码
查看>>
jQuery笔记——jQuery选择器实例应用
查看>>
Number Sequence 无算法,靠思想 数学题
查看>>
iPhone6和iPhone6 plus的iOS8设计尺寸参考指南
查看>>
MySQL大表优化方案
查看>>
HDU 3395 Special Fish 费用流(可KM匹配)
查看>>
线性模型(1) —— 多元线性回归
查看>>
ubuntu 系统目录结构
查看>>
【转】Linux/Unix笔记本
查看>>
iTunes , iCloud 用吐了也没把照片给备份好
查看>>
jQuery入门(1)
查看>>
轻松解决ubuntu系统引导问题
查看>>
用Vue来实现音乐播放器(十四):歌手数据接口抓取
查看>>
laya在微信小游戏中加载BitmapFont失效的问题
查看>>