【问题标题】:Create JSON object accoring to request.body根据 request.body 创建 JSON 对象
【发布时间】:2017-10-14 09:56:04
【问题描述】:

使用NodeJs + Express 创建一个 REST API。一切正常,但我不明白如何遍历 request.body 并检查其字段中的 undefinedempty 值并仅使用有效数据分配新对​​象。

request.body 看起来像:

{ 
  key: 'value',  
  otherKey: 'otherValue',
  oneMoreKey: '',
  oneMoreKey2: undefined,
  oneMoreKey3: null
}

最后我的对象应该是这样的:

let contactData = Object.assign({},{
        'key': 'value',
        'otherKey': 'otherValue'
    })

寻求您的建议和帮助

【问题讨论】:

  • 为什么不像其他人一样使用bodyParser,并发送有效值?
  • @adeneo 我不明白怎么做。对bodyParser 使用app.use( bodyParser.urlencoded( { extended: false } ) ); app.use( bodyParser.json() ); 设置

标签: javascript json object express


【解决方案1】:

JavaScript

function getCleanObject(oldObject) {
    var newObject = {};
    for (var property in oldObject) {
        var value = oldObject[property];
        if (value) newObject[property] = value;
    }
}

说明

您可以先创建一个新的干净Object

var newObject = {}; // same as new Object();

然后使用for loop 遍历对象的所有属性。

for (var property in oldObject)

然后获取该属性的值

var value = oldObject[property];

如果值为Troothy,则将该属性添加到新的Object

 if (value) newObject[property] = value;

请注意,这样false 值将被拒绝。要允许将其复制到新的 Object,您应该将 if 语句替换为

if(value || value === false)

此外,如果您从其他 Object 复制的 Object 也是 inherits,则它可能还会有额外的属性,如果您不希望包含它们,则应更改 @987654337 @声明到

if(value && oldObject.hasOwnProperty(value))

记住for(var item in object) != for(var item of list)

in 用于遍历对象的属性,而of 用于遍历iteratable(即列表)。此外,所有浏览器都支持in,而internet explorer 不支持of

【讨论】:

  • @vladja 此外,这不会复制任何 false boolean 值,如果您希望将 false values 传递给新的 Object,然后将 if 语句更改为if(value || value === false)
  • 小心for...in... 循环。这将遍历对象的所有直接属性和从原型链继承的属性,增加了很多开销。您应该使用.hasOwnProperty 来确保您只检查附加到对象本身的属性。
  • @Shaka 这个问题是关于简单对象的,所以我不认为这是相关的。你认为我应该更新答案吗?
  • 是的,我想不会有什么坏处。这是最佳做法。
  • @Shaka 好的,我修好了
【解决方案2】:
your_object = {
       key: request.body[key] || 'default',
       otherKey: request.body[otherKey] || 'default',
       oneMoreKey: request.body[oneMoreKey] || 'default'
       ...
}

解释 or (||) 如何工作JavaScript OR (||) variable assignment explanation

【讨论】:

  • 谢谢,我知道布尔逻辑,我没有使用它,因为我根本不需要默认值
  • @vladja 你可以按照尼克的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
  • 2017-02-26
  • 2020-07-10
  • 2013-12-27
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多