简体   繁体   English

动态合并值到对象属性-首先是未定义

[英]Dynamically merging values to object properties - first is undefined

I have a php generated javascript code which adds attributes and values dynamically to an object. 我有一个php生成的javascript代码,可将属性和值动态添加到对象。 It looks something like this: 看起来像这样:

 var javascriptObject = {};

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

Since I might have multiple events on the same date, it would add to the same object property, which is then processed by an external calendar library. 由于我可能在同一日期有多个事件,因此它将添加到同一对象属性,然后由外部日历库处理。 Now, everything works fine. 现在,一切正常。 BUT, since it adds new data with += the first "undefined" value always stays in the beginning of every entry. 但是,因为它添加了+ =的新数据,所以第一个“未定义”值始终停留在每个条目的开头。

My question is, is there a way in Javascript to initialize an object with a default (empty or maybe null) value instead of leaving it 'undefined'? 我的问题是,Javascript中有没有一种方法可以使用默认值(空值或可能为null)初始化对象,而不是将其保留为“ undefined”? Can someone point me to a better solution? 有人可以指出我更好的解决方案吗?

ps: I'd really like to avoid checking for 'undefined' at every loop to keep the code clean, since it's a php generated javascript, would be a complete mess when the event list is big. ps:我真的很想避免在每个循环中检查“ undefined”以保持代码干净,因为它是PHP生成的javascript,当事件列表很大时,将是一团糟。

Just try with: 只需尝试:

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

Or even saver way: 甚至是保护程序:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM