![](/img/trans.png)
[英]How to remove a property from an object and/or array if the value is null, undefined or empty?
[英]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,您可以使用map
和reduce
使其更加优雅,如下所示:
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 }), {});
您可能需要检查类型。
(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 == undefined
但null !== 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.