[英]Merge two intersecting arrays into a HashMap, One Key & Multiples values
我正在尝试制作一个基本的日历,以帮助使用Angular.js和Chrome扩展程序自动执行工作表,但是现在我仍然停留在这一部分。
在下面可以看到两个数组: pastTwoWeeks
是从今天开始14天的日期列表,以及从API检索的时间表entries
-这些实际上是具有许多属性的对象,但现在我仅使用一个简单的日期。
这是一个jsfiddle,我走对了吗? 谢谢http://jsfiddle.net/v599n/
var pastTwoWeeks = ['15/10/2013', '14/10/2013', '13/10/2013',
'12/10/2013', '11/10/2013', '10/10/2013',
'09/10/2013', '08/10/2013', '07/10/2013',
'06/10/2013', '05/10/2013', '04/10/2013',
'03/10/2013', '02/10/2013'];
var entries = ['11/10/2013', '11/10/2013', '11/10/2013',
'11/10/2013', '10/10/2013', '10/10/2013', '10/10/2013',
'09/10/2013', '09/10/2013', '09/10/2013', '08/10/2013',
'08/10/2013', '07/10/2013', '07/10/2013', '04/10/2013',
'04/10/2013', '03/10/2013', '03/10/2013', '02/10/2013',
'02/10/2013', '02/10/2013', '02/10/2013', '01/10/2013',
'01/10/2013', '01/10/2013'];
var calander = {};
for(var j=0; j< pastTwoWeeks.length; j++) {
var key = pastTwoWeeks[j];
if (key in calander == false) {
calander[key] = {};
}
for(var i = 0; i< entries.length; i++) {
var entry = entries[i];
if(entry === key){
calander[key][entry];
console.log(key + " " + entry);
}
}
}
我要实现的目标:
等等...
这是一个jsfiddle,我走对了吗?
并不是的。
calander[key] = {};
我认为您宁愿在这里输入条目数组,而不是对象。
calander[key][entry];
这什么也没做。 如果尝试创建属性,则需要分配给它。 另外,由于key
所有entry
都是相同的,因此您只会覆盖one和same属性。 更好的.push()
数组。
for(var j=0; j< pastTwoWeeks.length; j++) { for(var i = 0; i< entries.length; i++) { if(entry === key)
那是相当低效的。 您可以通过pastTwoWeeks
执行循环来做得更好,并且只需检查您的entry
是否作为calender
的键存在即可,该calender
以前已被pastTwoWeeks
填充。
var calendar = {};
for (var i=0; i<pastTwoWeeks.length; i++) {
var key = pastTwoWeeks[i];
calendar[key] = [];
}
for (var i=0; i<entries.length; i++) {
var entry = entries[i],
key = entry; // this might change for more complex objects
if (key in calendar) {
calendar[key].push(entry);
console.log(entry+" added to calendar at " + key);
}
}
这样的事情应该可以满足您的需求:
var pastTwoWeeks = ['15/10/2013', '14/10/2013', '13/10/2013', '03/10/2013', '02/10/2013'];
var entries = ['11/10/2013', '11/10/2013', '11/10/2013', '01/10/2013', '01/10/2013'];
var calander = {};
pastTwoWeeks.forEach(function(date) {
calander[date] = [];
});
entries.forEach(function(date) {
if (calander[date] === undefined) calander[date] = [];
calander[date].push(date);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.