簡體   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