2014-12-04 61 views
0

我有一個PHP生成的JavaScript代碼,它將屬性和值動態添加到對象。它看起來是這樣的:動態合併值到對象屬性 - 首先是未定義

var javascriptObject = {}; 

<?php 
foreach($events as $event) 
     echo 'javascriptObject[$event->date] += $event->title'; 
endforeach 
?> 

因爲我有可能在同一日期的多個事件,它會添加到同一對象的屬性,然後通過外部日曆庫處理。現在,一切正常。但是,因爲它增加了+ =第一個「未定義」值的新數據,它總是停留在每個條目的開頭。

我的問題是,是否有一種方法在Javascript中初始化一個對象的默認值(空或可能爲null)而不是將其保留爲'undefined'?有人能指點我一個更好的解決方案嗎?

ps:我真的很想避免在每個循環中檢查'undefined'以保持代碼清潔,因爲它是一個php生成的javascript,當事件列表很大時會是一個完整的混亂。

foreach ($events as $event) { 
    echo 'javascriptObject[' . $event->date . '] = (javascriptObject[' . $event->date . '] || "") + "' . $event->title . '";'; 
} 

甚至保護方式:

+0

不會擴展變量單引號內,裏面只有雙引號。 – Barmar 2014-12-04 12:04:26

+0

這只是邏輯的一個例子,語法可能不正確 – raphadko 2014-12-04 12:07:33

回答

1

與剛剛嘗試

$javascriptObject = array(); 
foreach ($events as $event) { 
    if (!isset($javascriptObject[ $event->date ])) { 
    $javascriptObject[ $event->date ] = ''; 
    } 
    $javascriptObject[ $event->date ] .= $event->title; 
} 

echo 'var javascriptObject = ' . json_encode($javascriptObject) . ';'; 
+0

如果該屬性已存在,則不會追加到該屬性,而是覆蓋該屬性。 – Barmar 2014-12-04 12:05:40

+0

@Barmar你是對的 - 修復。 – hsz 2014-12-04 12:07:33

+0

問題不在於語法..我使用laravel,所以寫的語法只是一個示例 – raphadko 2014-12-04 12:08:47