0

我正在尝试使用 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.
}

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

关键是奖项的名称。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]];
    }
}
4

2 回答 2

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,但(几乎)任何其他名称都可以使用。答案更新,测试。适用于任何原语数组。

于 2013-06-14T21:30:57.763 回答
0

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

于 2013-06-15T00:33:27.363 回答