set和map
set
ES6 新的数据结构 Set 类似于数组,但是成员的值都是唯一的,没有重复的值。
Set是一个构造函数,所以生成Set结构很简单,只需要new Set()
即可,同时Set函数可以接受一个数组参数
// 利用Set结构成员值唯一的特性,可以轻松实现数组去重
let set = new Set([1,2,3,4,5,5,5])
[...set] // [1,2,3,4,5]
console.log(set.size); // size属性返回Set实例的成员总数,本例输出:5
Set结构实例有四个操作方法,分别是添加成员:add
、删除成员:delete
、判断该值是否为Set的成员:has
、清楚所有的成员:clear
let set = new Set();
set.add(1).add(2).add(2) // 注意2被添加了2次
set.size // 2
set.has(2) // true
set.has(3) // false
set.delete(2);
set.has(2) // false
set.clear()
set.size // 0
Set结构还有4个遍历的方法,分别是keys
方法、values
方法、entries
方法、forEach
方法。
let set = new Set(['red', 'green', 'blue']);
set.keys(); // SetIterator {"red", "green", "blue"}
set.values(); // SetIterator {"red", "green", "blue"}
set.entries(); // SetIterator {"red" => "red", "green" => "green", "blue" => "blue"}
// 可以看到keys方法、values方法、entries方法返回的都是遍历器对象。由于Set结构键名和键值是同一个值,所以keys方法和values方法的行为是一致的。
set.forEach((value,key,s) => {
console.log(key + ' : ' + value);
console.log(s);
// red : red
// Set(3) {"red", "green", "blue"}
// green : green
// Set(3) {"red", "green", "blue"}
// blue : blue
// Set(3) {"red", "green", "blue"}
})
// 和数组的forEacch方法类似,Set结构的forEach方法同样接收三个参数,依次是键值、键名、集合本身。
map
ES6为什么要引入Map结构?因为传统的对象(Object)只能使用字符串当做键(key),为了解决这个问题,ES6 提供了 Map 数据结构。Map的键范围可以是各种类型的值。
const map = new Map();
const obj = {say: 'Hello World!'};
map.set(obj,'some string');
map.get(obj) // some string
// 对比传统的对象
const data = {};
data[obj] = 'some string';
data['[object Object]'] // some string
Map结构有如下的操作方法
const map = new Map();
const k1 = ['k1'];
// 添加成员:Map.prototype.set(key, value)
map.set(k1,'values');
// 读取成员:Map.prototype.get(key)
map.get(k1); // values
// 判断键是否在Map对象中:Map.prototype.has(key)
map.has(k1); // true
// 删除某个键:Map.prototype.delete(key)
// 清空Map的所有成员:Map.prototype.clear()
Map的遍历方法和Set结构的一样,分别为keys
方法、values
方法、entries
方法、forEach
方法,这里就不再做赘述。
标签:blue,map,Set,Map,set,red 来源: https://blog.csdn.net/weixin_42115153/article/details/115595759
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。