javascript中的哈希表

时间:2013-06-07 16:27:17

标签: javascript hashtable

我正在尝试构建数据结构。

在我有限的知识中,'哈希表'似乎是要走的路。如果您认为有更简单的方法,请提出建议。

我有两个一维数组: -

A [] - 包含徽章的名称(成就)

B [] - 包含从数组A []中完成这些成就的相应日期。

成就/成就/徽章可以多次完成。

因此,两个数组的样本: -

['学者','贡献者','老师','学生','风滚草','学者'......,'学者',......]

B ['1/2010','2/2011','3/2011','6/2012','10/2012','2/2013',......'3 / 2013' ,........]

我想用数据结构实现的目标是: -

唯一键列表(eq: - 'scholar')及其所有现有值(数组B []中的日期)。

因此我的最终结果应该是: -

({'scholar':'1/2010','2/2013','3/2013'}),({'contributor':........})..... .....

通过这种方式,我可以选择一个唯一的键,然后遍历其所有唯一值,然后使用它们在x-y网格上绘图。 (y轴标签是唯一徽章名称,x轴是日期,是时间轴的排序。)

任何人都可以指导我如何构建这样的数据结构吗?

如何从创建的数据结构中访问密钥....授予我不知道有多少密钥以及它们各自的值是什么。分配这些键是动态的,因此数字和名称会有所不同。

2 个答案:

答案 0 :(得分:1)

您的最终对象结构如下所示:

{
    'scholar': [],
    'contributor': []
}

要构建它,迭代遍历names数组并构建最终结果:如果最终结果包含键,则将相应的日期推送到其值,否则将新键设置为包含其对应日期的数组。

类似的东西:

var resultVal = {};
for(var i = 0; i < names.length; ++i) {
    if(resultVal[names[i]]) {
        resultVal[names[i]].push(dates[i]);
    } else {
        resultVal[names[i]] = [dates[i]];
    }
}

访问结果 - 遍历所有值:

for(var key in resultVal) {
    var dates = resultVal[key];

    for(var i = 0; i < dates.length; ++i) {
       // you logic here for each date
       console.log("resultVal[" + key + "] ==> " + resultVal[key][i]);
    }
}

会给出如下结果:

resultVal[scholar] ==> 1/2010
resultVal[scholar] ==> 2/2013
resultVal[scholar] ==> 3/2013
resultVal[contributor] ==> 2/2011
resultVal[teacher] ==> 3/2011
resultVal[student] ==> 6/2012
resultVal[tumbleweed] ==> 10/2012

答案 1 :(得分:0)

你可以试试这个......

var A = ['scholar', 'contributor',
  'teacher', 'student', 'tumbleweed', 'scholar','scholar'];

var B = ['1/2010', '2/2011', 
  '3/2011', '6/2012', '10/2012', '2/2013','3/2013'];

var combined = {};

for(var i=0;i<A.length;i++) {
  if(combined[A[i]] === undefined) {
    combined[A[i]] = [];
  }
  combined[A[i]].push(B[i]);
}

然后可以通过

访问combined中的每个数组
combined.scholar[0]

combined['scholar'][0]

在与===

进行比较时,请注意undefined