在JavaScript中将对象用作HashMap

时间:2015-01-29 22:13:32

标签: javascript object hashmap

我将在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;

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

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

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

1 个答案:

答案 0 :(得分:0)

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

我并非100%确定我理解您要做的事情,但是如果您想要遍历所有链接并通过URL创建它们的哈希映射,其中URL是索引和data是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];

请记住,此地图没有任何特定顺序(如果您希望保留订单,则需要一个数组)。您可以像上一行一样索引地图,也可以像这样迭代地图中的所有网址:

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