簡體   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