JavaScript荟萃类:Array、Map、Set版权声明
原创版权声明:本文是博客作者的原创文章,全文如下。 CC 4.0 by-sa 版权协议,转载请附上原始来源链接和本声明。
指向本文的链接:https://blog.csdn.net/cathar/article/details/53363845
在JavaScript中不像java数据结构太多了。在实践中,是否使用对象或数组需要仔细考虑。例如:如果实现 Map的函数既可以使用关联数组,也可以使用对象,那么有什么区别呢?
值得注意的是,在JavaScript在中,所有变量实际上都是某种类型的对象。记住这一点,就不难理解数组实际上是Array() 类型的对象,则可以向其添加各种属性。所谓的关联数组实际上为数组对象添加了很多属性,这在访问时就可以看到。
1.基本概念
对象:对象的每个值都是该对象的一个属性。可以使用创建对象。var obj = {}:
var person = {age:18,name:"John"};
var person2 = Object()
person2.age = 19
person2.name = "Tim"
Array():传统数组(下标访问);.
var persons = Array(4) //创建一个只有四个元素的数组
var names1 = [a,b,c]//
var persons2 = Array()
persons2["age"] = 18
persons2["name"] = "John"
由于该对象可以实现Map你为什么想要有这个功能map? 注意:JavaScript对象的键必须是字符串。
Map:是一组具有极快查找速度的键-值对的结构。通过传入数组数组而建立。通过呼叫 .set(key,value) 以添加新元素。
var m = new Map([[Michael, 95], [Bob, 75], [Tracy, 85]]);
m.get(Michael); // 95
m.set(Adam, 67); // 添加新的key-value
Set:Set和Map同样,它也是一个群体key集合,但不存储value。由于key不能重复,所以在Set在中,无副本key。要创建Set,需要提供一个Array作为输入,或者直接创建一个空的。Set:
var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
中的重复元素Set会被自动过滤,add(key) 方法可以将元素添加到Set中。
二、iterable类型遍历集合:Array、Map和Set都属于iterable类型
具有iterable类型集合可以通过新的for … of 循环以遍历。
var a = [A, B, C];
var s = new Set([A, B, C]);
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]);
}
for … of循环和for … in循环之间的区别是什么?前者只接受集合本身的元素,而不是属性,而后者,当我们向数组添加属性时,我们将定位所有key,则原始数组返回数组下标。
var a = [A, B, C];
a.name = Hello;
for (var x in a) {
alert(x); // 0, 1, 2, name
}
/ for ... in循环将把name包括在内,Array的length不包括属性。for ... of循环完全修复了这些问题,并且它只循环集合本身的元素:/
var a = [A, B, C];
a.name = Hello;
for (var x of a) {
alert(x); // A, B, C
}
直接使用iterable内置的forEach方法,该方法接收在每次迭代中自动回调的函数。
以Array为例:
var a = [A, B, C];
a.forEach(function (element, index, array) {
// element: 指向当前元素的值
// index: 指向当前索引
// array: 指向Array对象本身
alert(element);
});
// 注意,forEach()方法是ES5.1标准介绍,需要测试浏览器是否支持。Set与Array类似,但Set没有索引,因此回调函数的前两个参数是元素本身:
var s = new Set([A, B, C]);
s.forEach(function (element, sameElement, set) {
alert(element);
});
// Map回调函数参数依次为value、key和map本身:
var m = new Map([[1, x], [2, y], [3, z]]);
m.forEach(function (value, key, map) {
alert(value);
});
所以对于前面提到的 for… in 发生的回报key 的问题用 for … of 或者 forEach 回调可以解决。
var a = [A, B, C];
a.name = Hello;
for (var x of a) {
alert(x); // A, B, C
}
a.forEach(function(v,i){
alert(v); // A, B, C 与 for ... of 功效相同
})
————————————————
版权声明:本文是CSDN博主「cathar“原文,跟上。CC 4.0 by-sa版权协议,转载请附上原始来源链接和本声明。
原始链接:https://blog.csdn.net/cathar/article/details/53363845
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除