繁体   English   中英

将两个相交的数组合并为HashMap,一键和倍数值

[英]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);
        }
    }
}

我要实现的目标:

  • 15/10/2013
  • 14/10/2013
  • 2013年10月13日
  • 2013/12/10
  • 11/10/2013(4个条目)
    • 2013年11月10日
    • 2013年11月10日
    • 2013年11月10日
    • 2013年11月10日

等等...

这是一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM