2011-09-28 113 views
1

我在JavaScript中遇到了一些問題。在JavaScript中填充多維數組

我需要獲取數組寬度日期作爲鍵和事件作爲值。

在PHP中我會做這樣的事情:

$var = new array(); 
Loop 
$var[$date][] = $event; 
End loop 

你知道我是什麼意思?

感謝, 問候

+0

不,我真的不知道你的意思。但我猜測併發布了一個答案。如果這不能回答你的問題,請評論解釋你的問題。 –

回答

3

在JavaScript中,您可以創建一個數據結構,像這樣:

var events = { 
    '2009-09-09': [], 
    '2010-10-10': [], 
    '2011-11-11': [] 
}; 

events = { ... }是一個對象在JavaScript中的文字。 javscript中的對象非常類似於以屬性作爲關鍵字的哈希值,所以這實際上將用作日期中鍵入的哈希值。每個日期都用一個空數組進行初始化。

你還可以用事件填滿它這樣

events[date].push(event); 

如果你不提前知道時間日期,可以動態填充哈希。所以,你只有一個空的哈希開始:

if (!(date in events)) events[date] = []; 
events[date].push(event); 

date in events檢查:

var events = {}; 

然後,你每次去添加事件,像這次檢查的日期鍵看看密鑰是否存在,並且!否定它。因此,如果日期鍵不存在,則它會使用空數組初始化日期鍵。然後它像往常一樣推動該日期。

+0

「紅寶石中的物體」? – Dave

+0

感謝您的回答。爲了更好地解釋我:我正在獲取對象中的循環日期。我想用多個事件填充所有日期,也不知道如何在沒有指定任何鍵的情況下將元素添加到數組中,例如在PHP $ events [$ date] [] = $ event中; –

+0

@dave,oops,typo。固定。 –

1

Javascript關鍵值映射由Object s處理。一個空對象只是{}。你可以做到這一點有點像的東西(注意,VAR是在Javascript中的保留字,所以我不能準確地複製你的例子):

var variable = {}; 
var date_list = [1,2,3]; 
var event_list = [4,5,6]; 
for (i in date_list){ 
    var key = date_list[i]; 
    var value = event_list[i]; 
    variable[key] = value; 
} 

// variable now contains: {1:4, 2:5, 3:6} 

console.log(variable[1]); 
// prints 4 

編輯:這是基本的語法。如果你想爲每個鍵都有一個數組,只需做一些類似的事情,但是使用數組而不是數字在event_list中。例如:

my_dates = {'2011': [1,2,3], '2010': [6,7,8]} 
1

將元素添加到列表中,你可以使用JavaScript的push數組對象的方法...

events_by_date = {}; 
... 
for (var i=0; i<events.length; i++) { 
    if (!events_by_date[events[i].date]) { 
     // This is the first event on this date 
     // so create the list 
     events_by_date[events[i].date] = []; 
    } 
    // Add the event to the list of events in that date 
    events_by_date[events[i].date].push(events[i]); 
}