在 JavaScript 中使用对象作为 HashMap

Use an object as a HashMap in JavaScript

我将在 JavaScript 中使用一个对象作为 HashMap。我想为该对象添加一个新的 属性 键并给它一个值。然后,过一会儿,获取该值并在其上做一些事情。

我想提取所有链接。将页面的 URL 保存为键,将其链接的数组保存为值。因此,我写了以下几行。

假设页面的 URL 是 http://www.google.com

var test = {};
var links = document.getElementsByTagName('a');
var currentURL = document.URL;
test.currentURL = links;

在这里,我的期望是我有一个 http://www.google.com 的键和它的值,它是一个包含页面上所有链接的数组。在那之后,我想写下一行

var inProcessURL = allTheURLs[0].url;
var arrayOfLinks = test.inProcessURL;

然后在这个数组的基础上工作。但是,我发现在第一部分中,我创建的密钥是 'currentURL' 而不是 'http://www.google.com' 这导致我以后无法引用它。

有什么方法可以实现我在 JavaScript 中的目标,或者我必须将我的数据结构从对象更改为数组?

我不知道在不同的步骤中我要参考哪个键。它们将是从数组中提取的东西。

首先,您的变量 links 是一个 nodeList 对象,它是一个节点列表。因此,要引用该列表中的 DOM 对象,您需要遍历该列表。

我不是 100% 确定我明白你想做什么,但如果你想遍历所有 links 并通过 URL 创建它们的哈希图,其中URL 是索引,数据是 DOM 对象,你可以这样做:

var map = {};
var links = document.getElementsByTagName("a"), obj;
for (var i = 0; i < links.length; i++) {
    obj = links[i];
    map[obj.href] = obj;
}

这允许您通过 URL 对地图进行索引,以获取 link 到 URL 的 DOM 对象。注意:如果您有任何 link 包含与其他 link 相同的 URL,地图将包含引用 URL 的最后一个 DOM 对象因为地图本身不支持重复。

所以,如果你想在特定变量中找到 link 到 link 的哪个 DOM 对象,你可以这样做:

var url = "http://www.google.com";
var obj = map[url];

请记住,这张地图没有任何特定的顺序(如果你想保留顺序,你需要一个数组)。您可以像上一行那样在地图中建立索引,或者您可以像这样迭代地图中的所有 URLs:

for (var url in map) {
    // url is the URL, map[url] is the DOM object for that URL
    if (url === "http://www.google.com") {
        map[url].style.color = "red";
    }
}