JavaScript 从零开始首页投稿(暂停使用,暂停投稿)

[JavaScript] (Day-07) - Iterable

2017-06-25  本文已影响14人  已重置2020
Whatever is worth doing is worth doing well. 任何值得做的,就把它做好。

JavaScript 中的默认对象表示方式为{...},类似于iOS中的 Dictionary 数据结构,即都用键值对组成;

但是JavaScript的对象有个局限,就是键必须是字符串,但实际上Number或者其他数据类型作为键也是非常合理的,于是引进了一个新的类型Map, 一个也是由键值对组成的数据结构,但是其健可以是Number或者其他数据类型;


Map

Map是一组键值对的结构,具有极快的查找速度

初始化Map需要一个二维数组,或者直接初始化一个空Map

初始化方式一:
我们将一组人的 namescore 放到一个Map中, 通过 name 查找对应 score

var m = new Map([["Michael", 95], ["Bob", 75], ["Tracy", 85]]);
m.get('Michael'); // 95

我们将一组人的 namescore 放到一个Map中, 通过 score 查找对应 name

var m = new Map([[95, "Michael"], [75, "Bob"], [85, "Tracy"]]);
m.get(85); // "Tracy"

初始化方式二:

var m = new Map(); // 空Map
m.set("Adam", 67); // 添加新的key-value
m.set("Bob", 59);
m.has("Adam"); // 是否存在key "Adam": true
m.get("Adam"); // 67
m.delete("Adam"); // 删除key 'Adam'
m.get("Adam"); // undefined

由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:

var m = new Map();
m.set("Adam", 67);
m.set("Adam", 88);
m.get("Adam"); // 88


Set

Set 类似与 iOS 中的集合
Set 类似于数组,但是元素是无序的,而且不能重复

要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3

重复元素在Set中自动被过滤:

var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}

注意数字3和字符串'3'是不同的元素。

Set 的增删操作:

var s = new Set([1, 2, 3]); // 含1, 2, 3
s.add(4); // Set {1, 2, 3, 4}
s.delete(3); // Set {1, 2, 4}


Iterable类型

遍历Array可以采用下标循环,遍历MapSet就无法使用下标。
ArrayMapSet都属于iterable类型。
具有iterable类型的集合可以通过新的for...of循环来遍历。

用for ... of循环遍历集合,用法如下:

// 数组 Array
var a = ["A", "B", "C"]; 
// 集合 Set
var s = new Set(["A", "B", "C"]);
// Map
var m = new Map([[1, "x"], [2, "y"], [3, "z"]]);
for (var x of a) { // 遍历Array
    alert(x);
}
for (var x of s) { // 遍历Set
    alert(x);
}
for (var x of m) { // 遍历Map
    alert(x[0] + '=' + x[1]);  // x[0]->key值, x[1]->Value值
}
for ... of循环和for ... in循环有何区别?

for...in它遍历的实际上是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。
for ... of 循环,它只循环集合本身的元素


forEach

iterable内置的forEach方法,它接收一个函数,每次迭代就自动回调该函数

var a = ["A", "B", "C"];
a.forEach(function (element, index, array) {
    // element: 指向当前元素的值
    // index: 指向当前索引
    // array: 指向Array对象本身
    alert(element);
});

如果对某些参数不感兴趣,可以忽略它们, 因为JavaScript的函数调用不要求参数必须一致

var a = ["A", "B", "C"];
a.forEach(function (element) {
    alert(element);
});
上一篇 下一篇

猜你喜欢

热点阅读