JavaScript中的集合 数据结构——Set
ES6提供了新的数据结构Set,它类似数组,不同的是集合Set中每个元素都是唯一的,没有重复的值。
Set本身是一个构造函数,可以实例化一个Set数据结构。
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
console.log(i);
}
// 2 3 5 4
Set集合的属性和方法
属性
1.构造函数,可以通过new实例化一个Set集合
const set = new Set();
2.获取集合的成员总数
set.size
方法
add(value)
// 添加某个值,返回 Set 结构本身
delete(value)
// 删除某个值,返回一个布尔值,表示删除是否成功
has(value)
// 返回一个布尔值,表示该值是否为Set的成员
clear()
// 清除Set集合所有元素,无返回值
判断对象的长度,如果使用for...in...
语句遍历对象的属性时,会包括遍历对象从原型Object继承的属性,所以还要使用hasOwnProperty
方法验证对象是否具有该属性。所有JavaScript对象都有hasOwnProperty方法。这个方法返回一个表明对象是否具有特定属性的布尔值。
数据结构Set
集合使用对象而不是数组来表示。JavaScript对象的键值不允许重复,这就保证了集合元素的唯一,不会重复。
为集合创建以下方法:
has(value)
:如果值在集合中,返回true,否则返回false。
add(value)
:向集合添加一个新的项。
remove(value)
:从集合移除一个值。
clear()
:移除集合中的所有项。
size()
:返回集合所包含元素的数量。与数组的length属性类似。
values()
:返回一个包含集合中所有值的数组。
function Set() {
var items = {};
/* this.has = function(value) {
return value in items;
}; */
this.has = function(value) {
return items.hasOwnProperty(value);
};
this.add = function(value) {
if (!this.has(value)) {
items[value] = value;
return true;
}
return false;
};
this.remove = function(value) {
if (this.has(value)) {
delete items[value];
return true;
}
return false;
};
this.clear = function() {
items = {};
};
/* this.size = function() {
return Object.keys(items).length;
}; */
this.size = function() {
var count = 0;
for (var props in items) {
if (items.hasOwnProperty(props)) ++count;
}
return count;
};
/* this.values = function() {
return Object.keys(items);
}; */
this.values = function() {
var values = [];
for (var props in items) values.push(props);
return values;
};
}
使用Set
var set = new Set();
set.add(1);
console.log(set.size()); // 1
console.log(set.has(1)); // true
console.log(set.values()); // ['1']
set.add(2);
console.log(set.size()); // 2
console.log(set.has(2)); // true
console.log(set.values()); // ['1', '2']
set.remove(1);
console.log(set.has(1)); // false
console.log(set.values()); // ['2']
set.remove(2);
console.log(set.values()); // []