JavaScript荟萃类:Array、Map、Set

原创
小哥 3年前 (2022-10-28) 阅读数 262 #js教程

在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 功效相同
}) 

部分内容是从以下网站截取的,我要感谢作者。. JavaScrip教程

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门