我正在尝试使用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]];
}
}
答案 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...
循环产生的结果与其他浏览器完全不同。