您的位置:首页 > 其它

关于es6的一些常用关键字以及set与数组的操作

2017-04-26 16:32 357 查看
因为一个数组取差集的需求,搜索答案中顺便学习了下es6的新语法,自己总结了下,感觉很有意义,希望对您有所帮助。

首先介绍下let,与var类似,但用let声明的变量的作用域只是外层块,而不是整个外层函数。

以下代码中还用到了set(一群值的集合,与数组类似)。

//let setOfWords1 = new Set([1, 2, 3]);
//let setOfWords2 = new Set([3, 5, 2]);
var Array1 = [5,6,7,8,18,9,90,81];
var Array2 = [10,415,54,87,98,65,81];
let a = new Set(Array1);
let b = new Set(Array2);
// 并集
let unionSet = new Set([...a, ...b]);
// set转化为数组
let unionSet1 = Array.from(unionSet);
console.log(unionSet1);
// 交集
let intersectionSet = new Set([...a].filter(x => b.has(x)));
// set转化为数组
let intersectionSet1 = Array.from(intersectionSet);
console.log(intersectionSet1);
// 差集
let differenceABSet = new Set([...a].filter(x => !b.has(x)));
// set转化为数组
let differenceABSet1 = Array.from(differenceABSet);
console.log(differenceABSet1);


以下为es6常用关键字的简介总结。

关键字let

let声明的变量拥有块级作用域。也就是说用let声明的变量的作用域只是外层块,而不是整个外层函数。

let声明的全局变量不是全局对象的属性。这就意味着,你不可 以通过window.变量名的方式访问这些变量。它们只存在于一个不可见的块的作用域中,这个块理论上是Web页面中运行的所有JS代码的外层块。

形如for (let x…)的循环在每次迭代时都为x创建新的绑定。

let声明的变量直到控制流到达该变量被定义的代码行时才会被装载,所以在到达之前使用该变量会触发错误。

用let重定义变量会抛出一个语法错误(SyntaxError)。

关键字const

const声明的变量与let声明的变量类似,它们的不同之处在于,const声明的变量只可以在声明时赋值,不可随意修改,否则会导致SyntaxError(语法错误)。

关键字set

一个Set是一群值的集合。它是可变的,能增删元素。与数组区别如下:

一个Set不会包含相同元素,重复加入已有元素不会产生效果。

包含性检测。

var setOfWords = new Set([1, 2, 3, "zythum"]);
arrayOfWords = [1, 2, 3, "zythum"];
//判断set集合中是否包含“zythum”
setOfWords.has("zythum")               // 查询速度快
true
//判断数组中是否包含“zythum”
arrayOfWords.indexOf("zythum") !== -1  // 查询速度慢
true


不提供索引

以下是Set支持的所有操作:

new Set:创建一个新的、空的Set。

new Set(iterable):从任何可遍历数据中提取元素,构造出一个新的集合。

set.size:获取集合的大小,即其中元素的个数。

set.has(value):判定集合中是否含有指定元素,返回一个布尔值。

set.add(value):添加元素。如果与已有重复,则不产生效果。

set.delete(value):删除元素。如果并不存在,则不产生效果。.add()和.delete()都会返回集合自身,所以我们可以用链式语法。

setSymbol.iterator:返回一个新的遍历整个集合的迭代器。一般这个方法不会被直接调用,因为实际上就是它使集合能够被遍历,也就是说,我们可以直接写for (v of set) {…}等等。

set.forEach(f):直接用代码来解释好了,它就像是for (let value of set) { f(value, value, set); }的简写,类似于数组的.forEach()方法。

set.clear():清空集合。

set.keys()、set.values()和set.entries()返回各种迭代器,它们是为了兼容Map而提供的,所以我们待会儿再来看。

关键字map

一个Map对象由若干键值对组成,是一种更完善的Hash结构实现,类似于对象中的键值对应:

var m = new Map();
m.set(o: "content");
var o = {p: "Hello World"};


new Map:返回一个新的、空的Map。

new Map(pairs):根据所含元素形如[key, value]的数组pairs来创建一个新的Map。这里提供的pairs可以是一个已有的Map 对象,可以是一个由二元数组组成的数组,也可以是逐个生成二元数组的一个生成器,等等。

map.size:返回Map中项目的个数。

map.has(key):测试一个键名是否存在,类似key in obj。

map.get(key):返回一个键名对应的值,若键名不存在则返回undefined,类似obj[key]。

map.set(key, value):添加一对新的键值对,如果键名已存在就覆盖。

map.delete(key):按键名删除一项,类似delete obj[key]。

map.clear():清空Map。

mapSymbol.iterator:返回遍历所有项的迭代器,每项用一个键和值组成的二元数组表示。

map.forEach(f) 类似for (let [key, value] of map) { f(value, key, map); }。这里诡异的参数顺序,和Set中一样,是对应着Array.prototype.forEach()。

map.keys():返回遍历所有键的迭代器。

map.values():返回遍历所有值的迭代器。

map.entries():返回遍历所有项的迭代器,就像mapSymbol.iterator。实际上,它们就是同一个方法,不同名字。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: