Map 是一组键值对的结构,具有极快的查找速度。
初始化Map需要一个二维数组,或者直接初始化一个空Map:
var m1 = new Map([['a', 'a1'], ['b', 'b2'], ['c', 'c3']]);
var m11 = new Map([['a', 'a1'], ['b', 'b2'], ['c', 'c3']]);
var m2 = new Map();
打印 m1,会返回Map {“a” => “a1”, “b” => “b2”, “c” => “c3”};
typeof(m1) 是 object, 说明 Map 仍属于 object;
注意:m1 和 m11 并不相等,虽然两个 Map 里面的值一样,但是属于不同的object;
console.log(m1.size); // 3
console.log(m1.keys()); // 返回 MapIterator {"a", "b", "c"}
console.log(m1.values()); // 返回 MapIterator {"a1", "b2", "c3"}
console.log(m1.entries()); // 返回 MapIterator {"a" => "a1", "b" => "b2", "c" => "c3"}
console.log(m2.set('a', 1)); // 返回Map {"a" => 1}
console.log(m2.set('b', 2)); // {"a" => 1, "b" => 2}
console.log(m2.set('a', 11)); // {"a" => 11, "b" => 2}
console.log(m2.has('a')); // true
console.log(m2.has('c')); // false
console.log(m2.get('a')); // 11
console.log(m2.get('c')); // undefined
console.log(m2.delete('b')); // true
console.log(m2.delete('d')); // false
console.log(m2.get('b')); // undefined, 因为b已经删除
console.log(m1.clear()); // undefined
console.log(m1); // {}
Set 和 Map 类似,也是一组 key 的集合,但不存储 value。由于在 Set 中 key 会自动排重,这里的排重是严格等于,即 === ,因此 Set 中没有重复的 key。
初始化 Set 需要提供一个 Array 作为输入,或者直接创建一个空 Set:
var s1 = new Set(['a', 'b', 'c']);
var s11 = new Set(['a', 'b', 'c']);
var s2 = new Set(['a', 'a', 'b', 'b', 'c', 'c']);
var s3 = new Set();
console.log(s1.size); // 3
console.log(s1.keys()); // 返回 SetIterator {"a", "b", "c"}
console.log(s1.values()); // 返回 SetIterator {"a", "b", "c"}
console.log(s1.entries()); // 返回 SetIterator {"a", "b", "c"}
console.log(s3.add('aa')); // Set(1) {"aa"}
console.log(s3.add('bb')); // Set(2) {"aa", "bb"}
console.log(s3.add('aa')); // Set(2) {"aa", "bb"}
console.log(s3.has('aa')); // true
console.log(s3.has('ff')); // false
console.log(s3.delete('aa')); // true
console.log(s3.delete('ee')); // false
console.log(s3); // Set(1) {"bb"}
console.log(s1.clear()); // undefined
console.log(s1); // Set(0) {}