Coffeescript - 如果定义了值则赋值

Coffeescript - assign if value is defined

Coffeescript 中最好的方法是什么/Javascript 仅在定义了该值时才将值分配给对象字段?目前,我有以下代码为 ogData 对象的字段赋值。如果未定义用作输入的 articleData 字段,我希望字段保持未初始化状态。

ogData.title = articleData.title1p if articleData.title1p?
ogData.image = "#{articlePicDir}/#{articleData.imageFile}" if articleData.imageFile?
ogData.description = articleData.summary if articleData.summary?

有没有办法不用两次键入 articleData 字段的名称(可能更长并且可能经常更改)就可以做到这一点?

好吧,如果是常见情况,您可以编写一个函数,但我只能想出一个将您要分配给的 属性 用引号括起来的函数。我认为这种情况没有语法糖(正如您所说,您不需要 null 初始化)。这是此类函数的示例:

propMaybe = (obj, prop, data, optCalc) ->
  if data?
    obj[prop] = if optCalc? then optCalc(data) else data 

propMaybe ogData, 'description', articleData.summary
propMaybe ogData, 'title', articleData.title1p
propMaybe ogData, 'image', articleData.imageFile, 
  (file)-> "#{articlePicDir}/#{file}"

它并没有真正缩短你想要一些额外的数据的情况(就像你的第二种情况)。