欢迎访问宙启技术站
智能推送

ES6中for循环和Map、Set怎么用

发布时间:2023-05-16 13:49:07

ES6(ECMAScript 6)是ECMA国际组织制定的JavaScript最新的标准,为JavaScript语言带来了很多新的特性和语法糖。其中,for循环和Map、Set是JavaScript中非常常用的工具,它们在ES6中都有了新的用法。本文将详细介绍ES6中的for循环和Map、Set的用法,以及一些应用场景。

## ES6中的for循环

ES6中的for循环有两种形式:for...of和for...in。其中,for...of循环可以遍历可迭代对象(包括数组、字符串、Set、Map等),而for...in循环则是用于遍历对象的属性。

### for...of

for...of循环用于遍历可迭代对象,例如:

let arr = [1, 2, 3];
for (let item of arr) {
  console.log(item); //输出:1 2 3
}

let str = 'hello';
for (let char of str) {
  console.log(char); //输出:h e l l o
}

for...of循环也可以遍历Set和Map:

let set = new Set([1, 2, 3]);
for (let item of set) {
  console.log(item); //输出:1 2 3
}

let map = new Map([
  ['name', 'Alice'],
  ['age', 18]
]);
for (let [key, value] of map) {
  console.log(key, value); //输出:name Alice  age 18
}

需要注意的是,使用for...of循环遍历对象时,只能获取到对象的属性值,而不能获取属性名。因此,如果需要获取属性名和属性值,可以使用for...in循环。

### for...in

for...in循环用于遍历对象的属性,例如:

let obj = { name: 'Alice', age: 18 };
for (let key in obj) {
  console.log(key, obj[key]); //输出:name Alice  age 18
}

需要注意的是,for...in循环遍历对象的属性时,会遍历到对象原型链上的所有属性。因此,如果只需要遍历对象自身的属性,可以结合hasOwnProperty方法使用:

let obj = { name: 'Alice', age: 18 };
for (let key in obj) {
  if (obj.hasOwnProperty(key)) {
    console.log(key, obj[key]); //输出:name Alice  age 18
  }
}

## ES6中的Map

Map是JavaScript中的一种数据结构,用于存储键值对,类似于对象。但是,Map比对象更加灵活,它的键可以是任意类型的值,而不仅限于字符串。

### 创建Map

在ES6中,可以使用new关键字和Map构造函数创建一个Map实例:

let map = new Map();

也可以在创建Map实例时,通过数组传入键值对:

let map = new Map([
  ['name', 'Alice'],
  ['age', 18]
]);
console.log(map.get('name')); //输出:Alice
console.log(map.get('age')); //输出:18

### Map的常用方法

Map有一些常用的方法,包括set、get、has、delete、clear等。

- set(key, value):设置键值对,如果key已经存在,则覆盖原有的value。

- get(key):获取key对应的value,如果key不存在,则返回undefined。

- has(key):判断Map中是否包含key。

- delete(key):删除Map中key对应的键值对。

- clear():清空Map中所有的键值对。

例如:

let map = new Map();
map.set('name', 'Alice');
map.set('age', 18);

console.log(map.get('name')); //输出:Alice
console.log(map.has('name')); //输出:true
console.log(map.size); //输出:2

map.delete('name');
console.log(map.has('name')); //输出:false
map.clear();
console.log(map.size); //输出:0

### Map的遍历

ES6中,Map有四种遍历方法:keys、values、entries、forEach。

- keys():返回Map中所有的键名。

- values():返回Map中所有的键值。

- entries():返回Map中所有的键值对。

- forEach(callback, thisArg):遍历Map中的所有键值对,对每个键值对都执行一次callback函数,可以指定回调函数的this对象。

例如:

let map = new Map([
  ['name', 'Alice'],
  ['age', 18]
]);

for (let key of map.keys()) {
  console.log(key); //输出:name  age
}

for (let value of map.values()) {
  console.log(value); //输出:Alice  18
}

for (let [key, value] of map.entries()) {
  console.log(key, value); //输出:name Alice  age 18
}

map.forEach(function(value, key, map) {
  console.log(key, value); //输出:name Alice  age 18
});

## ES6中的Set

Set是JavaScript中的一种数据结构,用于存储一组 的值。Set中的值可以是任何数据类型,包括对象和函数。

### 创建Set

在ES6中,可以使用new关键字和Set构造函数创建一个Set实例:

let set = new Set();

也可以在创建Set实例时,通过数组传入值:

let set = new Set([1, 2, 3]);
console.log(set.has(1)); //输出:true
console.log(set.has(4)); //输出:false

### Set的常用方法

Set有一些常用的方法,包括add、has、delete、clear等。

- add(value):向Set中添加value。如果value已经存在,则不会重新添加。

- has(value):判断Set中是否包含value。

- delete(value):从Set中删除value。

- clear():清空Set中所有的值。

例如:

let set = new Set([1, 2, 3]);
set.add(4);
console.log(set.has(4)); //输出:true
console.log(set.size); //输出:4

set.delete(3);
console.log(set.has(3)); //输出:false

set.clear();
console.log(set.size); //输出:0

### Set的遍历

ES6中,Set有三种遍历方法:keys、values、entries。

- keys():返回Set中所有的值。

- values():返回Set中所有的值。

- entries():返回Set中所有的值和对应的键值。

例如:

let set = new Set([1, 2, 3]);
for (let value of set.values()) {
  console.log(value); //输出:1 2 3
}

for (let [key, value] of set.entries()) {
  console.log(key, value); //输出:1 1  2 2  3 3
}

## 应用场景

for循环、Map和Set是JavaScript中非常常用的工具,在实际开发中应用广泛。下面,我们将介绍一些应用场景。

### for循环的应用

for循环可以用于遍历数组、字符串等可迭代的对象,对于需要对每个元素进行处理的情况非常实用。

例如,以下是使用for循环对数组进行遍历,并计算出数组中所有元素的和:

let arr = [1, 2, 3];
let sum = 0;
for (let i = 0; i < arr.length; i++) {
  sum += arr[i];
}
console.log(sum); //输出:6

### Map的应用

Map可以用于存储各种类型的数据,而不仅仅是字符串键值。在以下情况下,Map非常适用:

- 需要存储对象或函数等引用类型的键值对。

- 需要保留键值的插入顺序。

例如,以下是使用Map存储对象的示例:

`javascript

let