Javascript 仅在定义时指定属性

Javascript 仅在定义时指定属性,javascript,Javascript,我有以下变量: const quote = { author: req.body.author, quote: req.body.quote, source: req.body.source, updatedAt: Date.now(), }; 我只想在定义了值的情况下分配这些值。例如,我可以使用以下选项检查未定义的: if(req.body.author === undefined) { console.log('author undefined

我有以下变量:

const quote = {
    author: req.body.author,
    quote: req.body.quote,
    source: req.body.source,
    updatedAt: Date.now(),
  };
我只想在定义了值的情况下分配这些值。例如,我可以使用以下选项检查未定义的:

 if(req.body.author === undefined) {
    console.log('author undefined');
  }

但我如何将其转换为不赋值?如果未定义属性,是否需要在事后进行检查,然后删除该属性?

如果post数据中未定义属性,是否可以使用默认值并将其设置为null

//Unsure if you want the default value to have any meaning
//using null would likely achieve what you're asking.
var default_value = null;

const quote = {
    author: req.body.author || default_value,
    quote: req.body.quote || default_value,
    source: req.body.source || default_value,
    updatedAt: Date.now(),
};
如果你真的想剥离它们,这里有一个基本的循环,你可以使用后

for (var i in quote) {
       if (quote[i] == default_value) {
           //Unsure how this works with const... might have to change to var
           delete quote[i];
       }
   }
或者,您可以迭代req.body对象,避免在初始声明之后进行验证

var quote = {};

for (var i in req.body) {
    quote[i] = req.body[i];
}
不确定是否仍要根据req.body对象中的某些值进行验证,以便可以添加一个检查,检查它们是否为空/未定义

var quote = {};

for (var i in req.body) {

   //This will only declare the value on the quote object if the value
   //is not null or undefined. False could be a value you're after so
   //I avoided using the cleaner version of 'if (!req.body[i]) ...'
   if (req.body[i] !== null || req.body[i] !== undefined) { 
      quote[i] = req.body[i];
   }
}
您甚至可以将其分解为一个很好的可重用函数(基本实现如下所示):

现在你可以在你所有的路线上使用这个

var quote = validatePOST(req.body, [null, undefined]);

author:req.body.author | | null
是的,您可以在未定义源值时检查这些属性值是什么?基本上我不希望这些值存在。它们来自一个函数,该函数稍后将值写入数据库。如果我在PUT请求中获得了值,我想更新它们,如果我没有;我不明白,我想让它们保持原样。然后你必须用一组
if
语句来构造对象。这似乎很明显,真的;你的问题中有这样一个
if
语句。问题是“默认”值写在我的数据库中。因此,如果请求中没有任何内容,我不希望属性在那里(因为它将被覆盖)。因此,如果没有提供,这只会将我数据库中的新值设置为null。检查我刚刚发布的循环是的,这样的循环是我的基本想法。只是不要;我不知道是否有更简单的方法,但适合我的目的。@MihaŠušteršič上面的编辑应该满足您的要求。稍后将在数据库本身中进行验证。这正是我需要的,谢谢
var quote = validatePOST(req.body, [null, undefined]);