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

如何在Javascript中从哈希表中提取唯一键,javascript,asp.net,hashtable,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"); } 所以重复3次 我的数据结构:- { 'scholar': [ ], 'co

我试图用javascript将哈希表中唯一的单个键打印到标记上

我的代码:-

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

我的数据结构:-

{
    'scholar': [ ],
    'contributor': [ ]
and so on.
}
基本上,奖项的名称和获奖日期。有些奖项只有一个日期,有些则有一个日期列表

密钥是该奖项的名称。值是成就的日期

为了构建它,我最初有两个数组,然后我迭代了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]];
    }
}
var resultVal={};
对于(变量i=0;i
像这样的事情应该对你有好处:

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]
Array.prototype.unique=function unique();
//使用前:
变量名称2=[1,2,3,4,3,2,1]
name2.unique().map(函数(键){
//在侧面板上写下姓名//
$('div.hidden').append(''+key+'

').css(“颜色”、“白色”); 返回键; }); // == [1,2,3,4]

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

如果使用Chrome,请为对象指定不同的名称,而不是
名称。显然,在Chrome中,它有一定的意义,
用于。。。在…
中,循环在其中产生的结果与在其他浏览器中产生的结果截然不同。

您可以发布一个数据示例吗?在任何情况下,重复的键都是无效的,根据定义,“键”必须是唯一的,因此我将开始解决数据来自何处的问题,而不是处理混乱的数据并调整output.op用于数组中的In。使用array.unique原型方法杀死Repeats我知道!“key”是唯一的,当我使用断点时。。我可以看出这些钥匙是独一无二的。但是不知道为什么它会重复3次。奇怪。@dandavis在我的案例中如何使用该方法?是的,请显示数据结构我收到错误Microsoft JScript运行时错误:对象不支持属性或方法“unique”,我没有进行否决投票。是的,“name”不能是获取数组方法的数组。这对我来说是新的。如果您需要它在IE8或之前工作,请使用for循环或[].map shim。我的数组名实际上叫做“d_name”。我甚至尝试了您的硬编码数组,每个元素重复5次。这让我想到,除了数组本身之外,还有其他错误。@Philo-你确定循环本身没有被调用5次吗?我的对象实际上被称为'd_name'。谢谢你提供的信息。未来参考“:)
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]