JavaScript學習筆記(Map、Set、iterable)

JavaScript的默認對象表示方式{}可以視爲其他語言中的Map或者Dictionary的數據結構,是一組鍵值對。
Map:是一組鍵值對的結構,具有極快的查找速度。

var m = new Map([['michael',95],['Bob',75],['zs',85]]);
console.log(m.get('zs'));

初始化的使用:

var m = new Map();
m.set('zs',67);
m.set('ls',100);
//是否存在key 'zs':true
m.has('zs');
// 67
m.get('zs');
//刪除key 'zs'
m.delete('zs');
m.get('ls');

由於一個key只能對應一個value,所以,多次對一個key放入value,後面的值會把前面的值沖掉:

var m = new Map();
m.set('admin',67);
m.set('admin',88);
m.get('admin');//88

Set

也是一組key的集合,但是不存儲value,由於key不能重複,所以在Set中,沒有重複的key,

在Set中重複的元素會自動被過濾掉

var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"};
//添加元素到s中
s.add(4);
//刪除元素
s.delete(2)

總結:

Map和Set是ES6標準新增的數據類型,請根據瀏覽器的支持情況決定是否要使用。

iterable
通常情況下遍歷Array可以採用下標循環,但是在遍歷Map和Set就無法使用下標爲了統一集合類型,ES6標準引入了新的iterable類型,Array、Map和Set集合都屬於iterable類型。
iterable集合可以通過for…of循環來遍歷
例如:

var m = new Map();
var s = new Set();
	
m.set('zs',10);
m.set('ls',20);

s.add(12);
s.add(15);

for (var x of s) {
	console.log("Set:"+x);
}
for (var x of m) {
	console.log("Map:"+x);
}

在這裏插入圖片描述
兩者的區別:

for...in循環遍歷的是集合的索引名
for...of循環則只遍歷集合本身的元素`

例子:

var a = ['a','b','c'];
a.name = 'hello';

for(var x in a){
	console.log("for...in:"+x);
}
for (var  s of a) {
	console.log("for...of:"+s);
}

在這裏插入圖片描述
使用for…of是爲了更好的使用iterable內置的forEach方法

var a = ['A', 'B', 'C'];
a.forEach(function (element, index, array) {
    // element: 指向當前元素的值
    // index: 指向當前索引
    // array: 指向Array對象本身
    console.log(element + ', index = ' + index);
});


Set與Array類似,但Set沒有索引,因此回調函數的前兩個參數都是元素本身:

var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
    console.log(element);
});

Map的回調函數參數依次爲value、key和map本身:

var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
    console.log(value);
});

如果對某些參數不感興趣,由於JavaScript的函數調用不要求參數必須一致,因此可以忽略它們。例如,只需要獲得Array的element:

var a = ['A', 'B', 'C'];
a.forEach(function (element) {
    console.log(element);
});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章