如何从Javascript中的哈希表中提取唯一键

时间:2013-06-14 21:19:27

标签: javascript asp.net hashtable

我正在尝试使用javascript从哈希表中将唯一的单个键打印到标记上。

我的代码: -

 for (var key in name) {
       // write  name in the side panel. //
       $('div.hidden').append('<p>' + key + '</p>').css("color", "white");
       }

这很有效。但是,它会多次打印我的密钥。

任何人都可以告诉我如何改进我的代码,只在哈希表中显示所有键一次。???

我的输出示例: -

A
B
C
D
E
F
G
H
A
B
C
D
E
F
G
H
A
B
C
D
E
F
G
H

所以重复3次。

我的数据结构: -

{
    'scholar': [ ],
    'contributor': [ ]
and so on.
}

基本上,奖项的名称和他们取得的成就日期。有些奖项只有一个日期,其他奖项有一个日期列表。

key是奖项的名称。 value是成就的日期/。

为了构建这个,我最初有两个数组,然后我遍历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]];
    }
}

2 个答案:

答案 0 :(得分:1)

这样的事情对你说得对:

Array.prototype.unique=function unique(){var r=this;var t=[];var mx=r.length;for (var z=0; z< mx; z++){if(t.indexOf(r[z])==-1){t[t.length]=r[z];}}return t;};

 //ex usage:
var name2=[1,2,3,4,3,2,1]
name2.unique().map(function(key){
       // write  name in the side panel. //
       $('div.hidden').append('<p>' + key + '</p>').css("color", "white");
  return key;
 }); // == [1,2,3,4]

注意,变量名称“name”由于一些奇怪的原因无法绑定到Array.prototype,但(几乎)任何其他名称都可以。答案更新,测试。适用于任何基元数组。

答案 1 :(得分:0)

如果您使用Chrome,请为对象指定其他名称,而不是name。显然在Chrome中它有一些含义,for ... in...循环产生的结果与其他浏览器完全不同。