我正在尝试构建数据结构。
在我有限的知识中,'哈希表'似乎是要走的路。如果您认为有更简单的方法,请提出建议。
我有两个一维数组: -
A [] - 包含徽章的名称(成就)
B [] - 包含从数组A []中完成这些成就的相应日期。
成就/成就/徽章可以多次完成。
因此,两个数组的样本: -
['学者','贡献者','老师','学生','风滚草','学者'......,'学者',......]
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':........})..... .....
通过这种方式,我可以选择一个唯一的键,然后遍历其所有唯一值,然后使用它们在x-y网格上绘图。 (y轴标签是唯一徽章名称,x轴是日期,是时间轴的排序。)
任何人都可以指导我如何构建这样的数据结构吗?
如何从创建的数据结构中访问密钥....授予我不知道有多少密钥以及它们各自的值是什么。分配这些键是动态的,因此数字和名称会有所不同。
答案 0 :(得分: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
答案 1 :(得分: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