<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>通过对象模拟Set</title>
<script src="../unitl/test.js"></script>
<style>
#results li.pass {color:green;}
#results li.fail {color:red;}
</style>
</head>
<body>
<div id="firstElement"></div>
<div id="secondElement"></div>
<ul id="results"></ul>
</body>
<script>
function Set() {
this.data = {},
this.length = 0;
}
//检查元素是否已经存在
Set.prototype.has = function(item) {
return typeof this.data[item] !== "undefined";
};
//当set中不存在元素
Set.prototype.add = function(item) {
if(!this.has(item)){
this.data[item] = true;
this.length++;
}
};
//如果set中已经存在元素,则删除。
Set.prototype.remove = function(item) {
if(this.has(item)) {
delete this.data[item];
this.length--;
}
}
//试图添加两次Hattori
const ninjas = new Set();
ninjas.add("Hattori");
ninjas.add("Hattori");
console.log(ninjas.length);
assert(ninjas.has("Hattori") && ninjas.length ===1,"Our set contains only one Hattori");
ninjas.remove("Hattori");
assert(!ninjas.has("Hattori") && ninjas.length === 0,"Our set is now empty!");
</script>
</html>
本例子中引入的js: test.js
显示了如何通过对象模拟Set的简单示例,使用对象存储数据,持续跟中集合中的元素,提供了3个方法,has,验证集合中是否存在元素,add,如果集合中不存在元素则将元素添加到集合中,
remove删除集合中已经存在的元素。