Map 跟 Set 常规操作

Set

对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。存储的是类数组数据。不是键值对。

var mySet = new Set();
mySet.add(1); // Set [ 1 ]
mySet.add(5); // Set [ 1, 5 ]
mySet.add(5); // Set [ 1, 5 ]
mySet.add({ a: 1, b: 2 }); //  Set [ 1, 5,  {a: 1, b: 2}]
mySet.add({ a: 1, b: 2 }); //  Set [ 1, 5, {a: 1, b: 2}, {a: 1, b: 2}]
console.log(mySet);

移除 Set 对象内的所有元素

var mySet = new Set();
mySet.clear();

移除 Set 的中与这个值相等的元素

var mySet = new Set();
mySet.add("foo");
mySet.delete("foo");

所有的值迭代

var mySet = new Set();
mySet.add("foo");
mySet.add("bar");
mySet.add("baz");

var setIter = mySet.values();

console.log(setIter.next().value); // "foo"
console.log(setIter.next().value); // "bar"
console.log(setIter.next().value); // "baz"

数组去重

const numbers = [2, 3, 4, 4, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 5, 32, 3, 4, 5];
//用...(展开操作符)操作符将Set转换为Array
console.log([...new Set(numbers)]);
// [2, 3, 4, 5, 6, 7, 32]

Map

JavaScript 的对象,键必须是字符串.为了解决这个问题,最新的 ES6 规范引入了新的数据类型 Map。Map 是一组键值对的结构,具有极快的查找速度。

对象保存键值对,并且能够记住键的原始插入顺序。Map 在涉及频繁增删键值对的场景下会有些性能优势

一个 Object 有一个原型,Map 默认情况不包含任何键。只包含显式插入的键。一个 Map 的键可以是任意值,包括函数、对象或任意基本类型。一个 Object 的键必须是一个 String 或是 Symbol。Map 在频繁增删键值对的场景下表现更好。

var x = new Map();
x.set("key", { x: 3, y: 5 });
console.log(x.get("key"));

一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值,包括函数、对象、基本类型。

Map 中的键值是有序的,而添加到对象中的键则不是。因此,当对它进行遍历时,Map 对象是按插入的顺序返回键值。

使用 for…of 方法迭代 Map

var x = new Map();
x.set("key", { x: 3, y: 5 });
for (var [key, value] of x) {
  console.log(key + " = " + value); // key = [object Object]
}

使用 forEach() 方法迭代 Map

var x = new Map();
x.set("key", { x: 3, y: 5 });
x.forEach(function (value, key) {
  console.log(key + " = " + value); // key = [object Object]
});

二维键值对数组转换成一个 Map 对象

var kvArray = [
  ["key1", "value1"],
  ["key2", "value2"],
];
var myMap = new Map(kvArray);
myMap.get("key1"); //  "value1"

将一个 Map 对象转换成一个二维键值对数组

var x = new Map();
x.set("key1", { x: 3, y: 5 });
x.set("key2", "val2");
// [["key1",{x: 3, y: 5}],["key2","val2"]]
console.log(Array.from(x));
// [["key1",{x: 3, y: 5}],["key2","val2"]]
console.log([...x]); // 使用了展开运算符

移除 Map 对象的所有键/值对

var myMap = new Map();
// do sth
myMap.clear();

移除一个键值对

var x = new Map();
x.set("bar", "foo");
x.delete("bar");

获得所有键

var x = new Map();
x.set("key1", { x: 3, y: 5 });
x.set("key2", "val2");
var keys = x.keys();
console.log(keys.next().value); // key1
console.log(keys.next().value); // key2

获得所有值

var x = new Map();
x.set("key1", { x: 3, y: 5 });
x.set("key2", "val2");
var values = x.values();
console.log(values.next().value); // {x: 3, y: 5}
console.log(values.next().value); // val2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值