将值动态合并到对象属性 - 第一个是未定义的


Dynamically merging values to object properties - first is undefined

我有一个php生成的javascript代码,它可以动态地向对象添加属性和值。它看起来像这样:

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

由于我可能在同一日期有多个事件,因此它会添加到同一对象属性中,然后由外部日历库处理。现在,一切正常。但是,由于它添加了带有 += 的新数据,因此第一个"未定义"值始终保留在每个条目的开头。

我的问题是,Javascript中有没有办法用默认(空或空(值初始化对象,而不是让它"未定义"?有人可以指出我更好的解决方案吗?

ps:我真的很想避免在每个循环中检查"undefined"以保持代码干净,因为它是 php 生成的 javascript,当事件列表很大时会一团糟。

试试:

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

甚至更节省的方式:

$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) . ';';