在 JavaScript 中使用对象作为 HashMap

Use an object as a HashMap in JavaScript

本文关键字:HashMap 对象 JavaScript      更新时间:2023-09-26

我将在JavaScript中使用一个对象作为HashMap。我想添加一个键,该键将成为该对象的新属性并为其赋值。然后,过了一会儿,获取该值并对其进行操作。

我想提取所有链接。将页面的 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;

然后基于此数组工作。但是,我发现在第一部分,我正在创建"当前URL"而不是"http://www.google.com"的密钥,这导致我以后无法引用它。

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

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

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

我不是 100% 确定我理解您要做什么,但是如果您想遍历所有链接并按 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 索引到映射中,以获取链接到该 URL 的 DOM 对象。 注意:如果您有任何链接包含与其他链接相同的 URL,则映射将包含引用该 URL 的最后一个 DOM 对象,因为映射本身不支持重复项。

因此,如果您想查找哪个 DOM 对象链接到特定变量中的链接,您可以这样做:

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

请记住,此映射不按任何特定顺序排列(如果要保留顺序,则需要一个数组)。 您可以按照上行索引到地图中,也可以像这样迭代地图中的所有 URL:

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";
    }
}