Map 数据结构

一、概念

Set 是一种叫【字典(是一些元素的集合,以 [ 键,值 ] 的形式储存)】的数据结构。

二、
1、属性和操作方法
  • size 返回 Map 的元素的个数。
  • set() 增加一个新元素,返回当前的 Map。
  • get() 返回键名对象的键值。
  • delete() 删除某个元素的键名,返回 Boolean 值。
  • has() 检测 Map 中是否包含某个元素,返回 Boolean 值。
  • clear() 清空集合,返回undefined 。
TypeScript 复制代码
const map = new Map();
map.set("foo", "aaaaa"); // {"foo" => 'aaaaa'}
map.set("bar", "bbbbb"); // {"foo" => 'aaaaa'}

map.size; // 2
map.get("foo"); // aaaaa
map.has("foo"); // true
map.delete("bar"); // true
map.clear() // 数据清空  undefined
2、遍历
  • keys() 返回键名。

  • values() 返回键值。

  • entries() 返回所有成员。

  • forEach() 遍历 Map 所有成员。

TypeScript 复制代码
const map = new Map([
  ['F', 'no'],
  ['T',  'yes'],
]);

for (let key of map.keys()) {
  console.log(key);
}
// "F"
// "T"

for (let value of map.values()) {
  console.log(value);
}
// "no"
// "yes"

for (let item of map.entries()) {
  console.log(item[0], item[1]);
}
// "F" "no"
// "T" "yes"

// 或者
for (let [key, value] of map.entries()) {
  console.log(key, value);
}
// "F" "no"
// "T" "yes"

// 等同于使用map.entries()
for (let [key, value] of map) {
  console.log(key, value);
}
// "F" "no"
// "T" "yes"


map.forEach(function(value, key, map) {
 console.log( key, value);
});

 // "F" "no"
 // "T" "yes"
3、与其他数据结构的相互转换
(1)、Map 转为数组

使用运算扩展符 【...】

TypeScript 复制代码
const myMap = new Map().set(true, 7).set({ foo: 3 }, ["abc"]);

console.log([...myMap]);

// [ [ true, 7 ], [ { foo: 3 }, [ 'abc' ] ] ]
(2)、 数组转为 Map
TypeScript 复制代码
const map = new Map([
  [1, 'one'],
  [2, 'two'],
  [3, 'three'],
]);
console.log(map)
//  {1 => 'one', 2 => 'two', 3 => 'three'}
(3)、Map 转为对象
TypeScript 复制代码
const strMapToObj = (strMap) => {
  let obj = Object.create(null);
  for (let [k, v] of strMap) {
    obj[k] = v;
  }
  console.log(obj); //  { yes: true, no: false }
  return obj;
};

const myMap = new Map().set("yes", true).set("no", false);
strMapToObj(myMap);
(4)、对象转为 Map
TypeScript 复制代码
let obj = {"a":1, "b":2};
let map = new Map(Object.entries(obj));

console.log(map) //  {'a' => 1, 'b' => 2}
 
相关推荐
2503_9284115612 小时前
9.15 ES6-变量-常量-块级作用域-解构赋值-箭头函数
前端·javascript·es6
Pu_Nine_913 小时前
深入理解节流(Throttle):原理、实现与应用场景
javascript·性能优化·es6·节流·lodash 库
我有一只臭臭1 天前
ES5 和 ES6 类的实现
前端·javascript·es6
Aotman_2 天前
el-input textarea 禁止输入中文字符,@input特殊字符实时替换,光标位置保持不变
前端·javascript·vue.js·前端框架·es6
还是大剑师兰特3 天前
ES6 面试题及详细答案 80题 (55-61)-- 类与继承
es6·大剑师·es6面试题
还是大剑师兰特3 天前
ES6基础入门教程(80问答)
es6·大剑师·es6基础·es6教程
yangzhi_emo4 天前
ES6笔记5
前端·笔记·es6
局i4 天前
ES6 类与继承:现代 JavaScript 面向对象编程
前端·javascript·es6
上单带刀不带妹5 天前
在 ES6 中如何提取深度嵌套的对象中的指定属性
前端·ecmascript·es6
十八朵郁金香5 天前
深入解析:ES6 中 class 与普通构造器的区别
前端·ecmascript·es6