Skip to content

JS 常用数据结构 #71

@coconilu

Description

@coconilu

概述

1. JSON

JSON 是一种语法,用来序列化对象、数组、数值、字符串、布尔值和 null 。它基于 JavaScript 语法,但与之不同:JavaScript不是JSON,JSON也不是JavaScript。

API:

JSON.parse(text[, reviver]),解析JSON字符串,构造由字符串描述的JavaScript值或对象。提供可选的reviver函数用以在返回之前对所得到的对象执行变换(操作)。
JSON.stringify(value[, replacer [, space]]),将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,如果指定了replacer是一个函数,则可以替换值,或者如果指定了replacer是一个数组,可选的仅包括指定的属性。

2. Map

Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

API:

new Map([iterable]),Iterable 可以是一个数组或者其他 iterable 对象,其元素或为键值对,或为两个元素的数组。 每个键值对都会添加到新的 Map。null 会被当做 undefined。

Map.prototype.size

Map.prototype.forEach(callback[, thisArg]),以插入顺序对 Map 对象中的每一个键值对执行一次参数中提供的回调函数
Map.prototype.get(key, value)
Map.prototype.set(),为Map对象添加一个指定键(key)和值(value)的新键值对
Map.prototype.has(key),返回一个bool值,用来表明map 中是否存在指定元素
Map.prototype.delete(key),除 Map 对象中指定的元素
Map.prototype.clear(),移除Map对象中的所有元素

Map.prototype.entries(),返回一个新的包含 [key, value] 对的 Iterator 对象,返回的迭代器的迭代顺序与 Map 对象的插入顺序相同
Map.prototype.keys(),返回一个新的 Iterator 对象,它包含按照顺序插入Map对象中每个元素的key值
Map.prototype.values(),返回一个新的Iterator对象,它包含按顺序插入Map对象中每个元素的value值

3. Set

API:

new Set([iterable]),如果传递一个可迭代对象,它的所有元素将被添加到新的 Set中。如果不指定此参数或其值为null,则新的 Set为空。

Set.prototype.size

Set.prototype.add(value),在Set对象尾部添加一个元素。返回该Set对象。
Set.prototype.clear(),移除Set对象内的所有元素。
Set.prototype.delete(value),移除Set的中与这个值相等的元素,返回Set.prototype.has(value)在这个操作前会返回的值(即如果该元素存在,返回true,否则返回false)。
Set.prototype.has(value),返回一个布尔值,表示该值在Set中存在与否。
Set.prototype.forEach(callback[, thisArg]),按照插入顺序,为Set对象中的每一个值调用一次callBackFn。如果提供了thisArg参数,回调中的this会是这个参数。

Set.prototype.entries(),返回一个 [value, value] 形式的迭代器对象。
Set.prototype.keys(),`Set.prototype.values()`的别名。
Set.prototype.values(),返回一个 Iterator  对象,这个对象以插入Set 对象的顺序包含了原 Set 对象里的每个元素。

4. WeakMap

WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。

在 JavaScript 里,map API 可以通过在其四个 API 方法中共用两个数组(一个存放键,一个存放值)来实现。给该 map 设置值时会同时将键和值推到这两个数组的末尾。从而使得键和值的索引在两个数组中相对应。当从该 map 取值的时候,需要遍历所有的键,然后使用此索引从存储值的数组中检索出相应的值。

在原生的WeakMap中,每个键对自己所引用对象的引用是 "弱引用", 这意味着,如果没有其他引用和该键引用同一个对象,这个对象将会被当作垃圾回收。原生 WeakMap 的结构是特殊且有效的,其用于映射的 key 只有在其没有被回收时才是有效的。

API:

WeakMap.prototype.delete()
WeakMap.prototype.get()
WeakMap.prototype.has()
WeakMap.prototype.set()

5. WeakSet

它和 Set 对象的区别有两点:

  1. WeakSet 对象中只能存放对象引用, 不能存放值, 而 Set 对象都可以
  2. WeakSet 对象中存储的对象值都是被弱引用的, 如果没有其他的变量或属性引用这个对象值, 则这个对象值会被当成垃圾回收掉. 正因为这样, WeakSet 对象是无法被枚举的, 没有办法拿到它包含的所有元素

API:

WeakSet.prototype.add()
WeakSet.prototype.delete()
WeakSet.prototype.has()

参考:

JSON
Map
Set

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions