gpt4 book ai didi

JavaScript 引用哈希

转载 作者:行者123 更新时间:2023-11-27 23:24:14 25 4
gpt4 key购买 nike

我有一个对象:

var myObject  = {myKey: myVal};

我想将一些元数据归因于该对象,不直接编辑该对象。例如,假设我想向该对象添加一个标签“myTag”。我可以通过创建一个将标签与对象列表匹配的对象来实现此目的:

var tags = {
'myTag': [myObject, someOtherObject, ...],
'myTag2': [otherObject, myObject, ...]
}

问题是,如果我遇到对该对象的另一个引用并想知道其现有标签,我必须迭代整个标签列表并查看每个数组中是否有对该对象的引用。随着标签和对象引用列表的增长,这将变得极其昂贵。

我一直在寻找某种方法来“散列”对象引用,这样我就可以翻转其头部的标签列表,如下所示:

var tags = {
myObject: ['myTag', 'myTag2']
}

但是由于对象引用不能用作键,因此我找不到任何干净的方法来完成此任务并考虑到性能。关于如何解决这个问题有什么想法吗?

最佳答案

在 ES6 中,您可以使用允许对象作为键的 weakMap。因此,您可以直接将对象存储在 mapweakMapset 中,而无需修改该对象。

在 ES5 中,对象不能是键,因此您必须向对象添加一个属性,该属性可以用作该对象的句柄。如果不编辑对象就无法做到这一点。您附加的属性可以设置为只读且不可枚举(因此大多数代码看不到它)。这是 ES5 中对对象的最小影响。

这种添加已知属性的技术,该属性被分配了某种唯一值来跟踪给定对象,这正是人们在 ES6 中使用 Wea​​kMap 之前解决此问题所采用的技术。

此 Set polyfill(旨在尽可能接近地模仿 ES6 实现,但可以在 ES5 中工作)允许您将对象添加到 Set 中并使用所描述的解决方法。如果您检查 getKey() function在该代码中,您可以看到一种技术,该技术使用对象上的已知属性名称,然后使用计数器和基于对象类型的前缀来为该特定对象创建唯一标识符。然后,该 key 以不可枚举、不可配置、不可写的方式附加到对象,使其成为对象的唯一标识符,通常只有那些知道要查找什么的人才能看到。

从那时起,任何查看该对象的人都可以检查附加到它的标识符,并将其与以前的标识符进行比较,看看这是否确实是同一个对象。当然,标识符本身可以存储在某个查找表中,而不会创建对此对象的任何不需要的引用(因为标识符只是一个字符串)。

关于JavaScript 引用哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35106305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com