javascript - 将两个相交的数组合并成一个 HashMap,一个键和多个值

标签 javascript

我正在尝试制作一个基本日历,以帮助使用 Angular.js 和 Chrome 扩展程序自动化工作中的时间表,但目前我陷入了这部分。

下面您可以看到两个数组:pastTwoWeeks,它是从今天起 14 天的日期列表,以及从 API 检索的时间表条目 - 这些实际上是具有许多属性的对象,但现在我只使用一个简单的日期。

这是一个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);
        }
    }
}

我想要实现的目标:

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

等等...

最佳答案

Here's a jsfiddle, am I on the right track?

不完全是。

calander[key] = {};

我认为您更想要这里的条目数组,而不是对象。

calander[key][entry];

这不会做任何事情。如果您尝试创建属性,则需要对其进行分配。此外,由于key 的所有entry 都是相同的,因此您只能覆盖同一个属性。更好的 .push() 到数组。

for(var j=0; j< pastTwoWeeks.length; j++) {   
    for(var i = 0; i< entries.length; i++) {
        if(entry === key)

这效率相当低。您可以通过依次执行循环来做得更好,只需检查您的 entry 是否作为 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);
    }
}

关于javascript - 将两个相交的数组合并成一个 HashMap,一个键和多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19391232/

相关文章:

javascript - 在我的起始日期选择框中,我想显示当前 session 日期范围之间的日期范围

javascript - 如何更改默认工具提示的位置和标题

javascript - Mongoose typescript 方式...?

javascript - Angular 6 树可摇动提供程序和惰性模块

javascript - 尝试使用 REGEX 过滤字符串中的多个值

javascript - 为什么正则表达式不能正确验证网站 URL?

javascript - 在后台暂停事件监听器

在 <div> 容器中显示动态消息的 JavaScript 函数

javascript - 在 meteor 中读取 shell 命令的输出

javascript - POST 请求(Javascript)