繁体   English   中英

如何从对象中删除未定义的属性?

[英]How to remove undefined property from object?

我有这个对象:

  this.prepaidObject = {
            'customerType' : this.prepaidDetailForm.prepaidDetails.customerType,
            'firstName' : this.prepaidDetailForm.prepaidDetails.firstName,
            'lastName' : this.prepaidDetailForm.prepaidDetails.lastName,
            'note' : this.prepaidDetailForm.prepaidDetails.note,
            'created': this.prepaidDetailForm.prepaidDetails.created
        };

现在有时某些属性是未定义的。 我想要的是如果this.prepaidDetailForm.prepaidDetails属性之一未定义不显示它们。 因此,例如,如果this.prepaidDetailForm.prepaidDetails.firsName未定义,我不需要创建'firstName'属性 isside 对象。 任何建议我该怎么做?

检查您的对象:

    for( var m in this.prepaidObject ) {
        if ( this.prepaidObject[m] == undefined ) {
            delete this.prepaidObject[m];
        }
    } 

执行此操作的最短方法是在stringify之后parse它。

确切的语法:

let prepaidObjectNew = JSON.parse(JSON.stringify(prepaidObject))

示例

之前:

var prepaidObject = {
    'customerType' : 'TestCustType',
    'firstName' : "sample FirstName",
    'lastName' : "sample LastName",
    'note' : undefined
 };

后:

{
    'customerType' : 'TestCustType',
    'firstName' : "sample FirstName",
    'lastName' : "sample LastName"
 };

一种方法是遍历键并只附加定义的键:

this.prepaidObject = { };
Object.keys(this.prepaidDetailForm.prepaidDetails)
     .forEach(function(key) {
           var val = this.prepaidDetailForm.prepaidDetails[key];
           if (val !== undefined) {
                this.prepaidObject[key] = val;
           }
     });

这是假设在键prepaidObject是一样prepaidDetails和所有的人都跟着你提到的同样的规则。

特别是如果您使用的是 ES6,您可以使用mapreduce使其更加优雅,如下所示:

this.prepaidObject = Object.keys(this.prepaidDetailForm.prepaidDetails)
     .map(key => ({key, val: this.prepaidDetailForm.prepaidDetails[key]}))
     .reduce((obj, {key, val}) => {
          if (val !== undefined) {
               obj[key] = val;
          }
          return obj;
     }, {});

还有一种使用更多 ES6 特性的更简洁的方法:

this.prepaidObject = Object.keys(this.prepaidDetailForm.prepaidDetails)
     .map(key => ({key, val: this.prepaidDetailForm.prepaidDetails[key]}))
     .filter(({_, val}) => val !== undefined)
     .reduce((obj, {key, val}) => Object.assign(obj, { [key]: val }), {});

使用Lodash使它在一行中变得太容易了:

_.pickBy(this.prepaidObject, _.identity);

这将删除所有虚假

您可能需要检查类型。

(typeof(this.prepaidDetailForm.prepaidDetails.firsName) != "undefined") ? this.prepaidDetailForm.prepaidDetails.firsName : ''

它基本上是:

var firstName = '';
if(typeof(this.prepaidDetailForm.prepaidDetails.firsName) != "undefined")
     firstName = this.prepaidDetailForm.prepaidDetails.firsName;

请尝试以下操作:

 for (var propName in this.prepaidObject) { 
    if (this.prepaidObject[propName] === undefined) {
      delete this.prepaidObject[propName];
    }
  }

并查看以下答案: Remove blank attributes from an Object in Javascript

this.prepaidObject = {};
for (var i in this.prepaidDetailForm.prepaidDetails) {
  if (typeof(this.prepaidDetailForm.prepaidDetails[i]) !== 'undefined') {
    this.prepaidObject[i] = this.prepaidDetailForm.prepaidDetails[i];
  } 
} 

如果您还想排除空值和未定义,请将条件更改为:

if (this.prepaidDetailForm.prepaidDetails[i] != null)

不是双 ==。 因为null == undefinednull !== undefined

假设你有一个像下面这样的对象,

var prepaidObject = {
    'customerType' : 'TestCustType',
    'firstName' : "sample FirstName",
    'lastName' : "sample LastName",
    'note' : undefined
 };

您可以使用 JSON.parse 和 JSON.stringify 方法删除 undefined,

JSON.parse(JSON.stringify(prepaidObject));
console.log(prepaidObject)

输出将是,

{
    'customerType' : 'TestCustType',
    'firstName' : "sample FirstName",
    'lastName' : "sample LastName"
 }

暂无
暂无

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

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