0

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

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

我有两个一维数组:-

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

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

一项成就/成就/徽章可以完成一次以上。

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

A['scholar', 'contributor', 'teacher', 'student', 'tumbleweed', 'scholar'.....,'scholar',......]

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' : ........})....... ..

这样我就可以挑选出一个唯一的键,然后遍历它的所有唯一值,然后使用它们在 xy 网格上绘图。(y 轴标签是唯一的徽章名称,x 轴是日期,有点像时间线。)

谁能指导我如何构建这样的数据结构?

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

4

2 回答 2

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
于 2013-06-07T16:36:49.547 回答
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

于 2013-06-07T16:45:09.973 回答