Javascript ES6中对象类型Sets的介绍与使用详解


Posted in Javascript onJuly 17, 2017

介绍

ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准。因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015。

Sets 是ES6(ES2015)中一个新的对象类型,用来创建一系列唯一值的集合。集合中的值可以是简单的原始类型如字符串(strings)或整数(integers),也可以是更复杂的对象类型如对象字面量或者数组。

基本方法

下面是基本的set及其方法(add, size, has, forEach, delete, clear)的简单示例:

let animals = new Set();

animals.add('?');
animals.add('?');
animals.add('?');
animals.add('?');
console.log(animals.size); // 4
animals.add('?');
console.log(animals.size); // 4

console.log(animals.has('?')); // true
animals.delete('?');
console.log(animals.has('?')); // false

animals.forEach(animal => {
 console.log(`Hey ${animal}!`);
});

// Hey ?!
// Hey ?!
// Hey ?!

animals.clear();
console.log(animals.size); // 0

初始化

下面是另一个将数组作为初始值传进set的示例。需要主要的是初始化的数组是如何被解构的,但是随后添加的数组将以数组的形式存在:

let myAnimals = new Set(['?', '?', '?', '?']);

myAnimals.add(['?', '?']);
myAnimals.add({ name: 'Rud', type: '?' });
console.log(myAnimals.size); // 4

myAnimals.forEach(animal => {
 console.log(animal);
});


// ?
// ?
// ["?", "?"]
// Object { name: "Rud", type: "?" }

字符串也是一个有效的迭代,所以也可以被传入来初始化一个set:

console.log('Only unique characters will be in this set.'.length); // 43

let sentence = new Set('Only unique characters will be in this set.');
console.log(sentence.size); // 18

For...of遍历

除了在一个set上可以使用forEach外,for...of循环也可以被用来遍历sets:

let moreAnimals = new Set(['?', '?', '?', '?']);

for (let animal of moreAnimals) {
 console.log(`Howdy ${ animal }`);
}

// Howdy ?
// Howdy ?
// Howdy ?
// Howdy ?

Keys 和 Values

Sets也有keys和values方法,由于keys是values的别名,所以两个方法其实是完成一样的事情。使用两者中的任何一个方法都会返回一个新的可迭代的对象,该对象的值与添加到集合中的顺序相同。

let partyItems = new Set(['?', '?', '?']);
let items = partyItems.values();

console.log(items.next());
console.log(items.next());
console.log(items.next());
console.log(items.next().done);

// Object {
// done: false,
// value: "?"
// }

// Object {
// done: false,
// value: "?"
// }

// Object {
// done: false,
// value: "?"
// }

// true

总结

以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

注:

原文: Introduction to Sets in JavaScript

作者: alligatorio

译者:smallbone

译文地址:https://alligator.io//js/sets-introduction/

Javascript 相关文章推荐
img标签中onerror用法
Aug 13 Javascript
jquery 事件对象属性小结
Apr 27 Javascript
提高javascript效率 一次判断,而不要次次判断
Mar 30 Javascript
javascript打印输出json实例
Nov 11 Javascript
javascript随机抽取0-100之间不重复的10个数
Feb 25 Javascript
JS实现弹出居中的模式窗口示例
Jun 20 Javascript
jQuery Raty 一款不错的星级评分插件
Aug 24 Javascript
利用jquery禁止外层滚动条的滚动
Jan 05 Javascript
JavaScript对JSON数据进行排序和搜索
Jul 24 Javascript
ES6中Class类的静态方法实例小结
Oct 28 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
Feb 01 Javascript
原生js代码能实现call和bind吗
Jul 31 Javascript
js实现图片懒加载效果
Jul 17 #Javascript
Vue.js项目部署到服务器的详细步骤
Jul 17 #Javascript
js图片放大镜实例讲解(必看篇)
Jul 17 #Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
Jul 17 #Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
Jul 16 #Javascript
node.js express中app.param的用法详解
Jul 16 #Javascript
Node.js中流(stream)的使用方法示例
Jul 16 #Javascript
You might like
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
PHP结合jQuery实现找回密码
2015/07/22 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
layui--select使用以及下拉框实现键盘选择的例子
2019/09/24 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
Python求出0~100以内的所有素数
2018/01/23 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
Keras 使用 Lambda层详解
2020/06/10 Python
python中封包建立过程实例
2021/02/18 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
离职感谢信怎么写
2015/01/22 职场文书
员工自我评价范文
2015/03/11 职场文书
考试后的感想
2015/08/07 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android