set与map

基本用法
类似于数组,但其成员的值都是唯一的。
创建方法
Set本身是一个构造函数,用来生成Set实例

const s = new Set();
[2, 3, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
  console.log(i);
}

内部比较机制
向Set实例加入值时不会发生类型转换,因此5和’5’是不同的。
利用算法“Same-value equality”来判断加入的值和已有的值是否相等,类似于Object.is( )方法,如果相等则不加入。
两个对象总是不相等的

let set = new Set();
set.add({});
set.add({});
console.log(set.size);

let a = {};
let b = a;
set.add(a);
set.add(b);
console.log(set.size);

add(value),添加值,返回该Set实例的引用。
delete(value),删除值,返回一个布尔值,表示删除是否成功。
has(value),返回一个布尔值,表示该值是否是Set实例的成员。
clear( ),清除所有成员,没有返回值

let set = new Set();
set.add(1).add(2).add(2);
console.log(set);

console.log(set.has(2));
console.log(set.has(3));

set.delete(1);
console.log(set);

set.clear();
console.log(set);

遍历方法
keys( ),返回键名的遍历器。
values( ),返回键值的遍历器

let set = new Set(["red", "green", "blue"]);
for (let item of set.keys()) {
  console.log(item);
}
for (let item of set.values()) {
  console.log(item);
}
//Set结构实例的默认遍历器生成函数就是values()方法
for (let item of set) {
  console.log(item);
}

基本用法
set(key, value),设置(添加)键值对。
get(key),通过key获取对应值。
类似Set的方法和属性
has(key)
delete(key)
clear( )
size

let m=new Map();
let o={p:'Hello world'};
m.set(o,'content’);
console.log(m.size);
console.log(m.get(o));
console.log(m.has(o));
console.log(m.delete(o));
console.log(m.has(o));
console.log(m.clear());

基本用法
如果Map的键是一个简单类型的值(数值,字符串,布尔值),只要两个值严格相等,Map就认为是同一个键

 mm.set(-0, 123);
  console.log(mm.get(+0));
  mm.set(true, 1);
  mm.set("true", 2);
  console.log(mm.get(true));
  mm.set(undefined, 3);
  mm.set(null, 4);
  console.log(mm.get(undefined));
  map.set(NaN, 111);
  console.log(mm.get(NaN));

Map 结构原生提供三个遍历器生成函数和一个遍历方法。
keys():返回键名的遍历器。
values():返回键值的遍历器。
entries():返回所有成员的遍历器。
forEach():遍历 Map 的所有成员。
Map 结构的默认遍历器接口(Symbol.iterator属性),就是entries方法

const map = new Map([
    ["F", "no"],
    ["T", "yes"]
  ]);
  
  for (let [key, value] of map.entries()) {
    console.log(key, value);
  }
  for (let [key, value] of map) {
    console.log(key, value);
  }

与其他数据结构的相互转换
Map转换为JSON
Map的键名有非字符串,可以转换为数组JSON

 function mapToArrayJSON(map) {
    return JSON.stringify([...map]);
  }
  let yourMap = new Map().set(true, 7).set({ foo: 3 }, ["abc"]);
  let json2 = mapToArrayJSON(yourMap);
  console.log(json2);

与其他数据结构的相互转换
JSON转换为Map
正常情况下所有键名都是字符串

function jsonToStrMap(jsonStr) {
    return objToStrMap(JSON.parse(jsonStr));
  }
  let theMap = jsonToStrMap('{"yes":true, "no": false}');
  console.log(theMap);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值