我有一系列对象,我想删除' undefined'来自任何对象的任何属性。
要从对象中删除undefined,我使用此方法
removeNullorUndefined:function(model) {
function recursiveFix(o) {
// loop through each property in the provided value
for (var k in o) {
// make sure the value owns the key
if (o.hasOwnProperty(k)) {
if (o[k] === 'undefined') {
// if the value is undefined, set it to 'null'
o[k] = '';
} else if (typeof (o[k]) !== 'string' && o[k].length > 0) {
// if there are sub-keys, make a recursive call
recursiveFix(o[k]);
}
}
}
}
var cloned = $.extend(true, {}, model);
recursiveFix(cloned);
return cloned;
},
如何修改它,以便它也可以接受一系列对象并删除未定义的对象。从它?
感谢任何输入
答案 0 :(得分:3)
只要值为undefined
而不是字符串值' undefined'然后一种方法是使用JSON.stringify
。参考财产价值:
如果未定义,在转换过程中遇到函数或符号,则省略(在对象中找到它)或删除为null(在数组中找到它时)。传入时,JSON.stringify也可以返回undefined" pure"值如JSON.stringify(function(){})或JSON.stringify(undefined)。
因此,您可以对对象进行字符串化并立即对其进行解析以删除undefined
值。
注意 :此方法将深度克隆整个对象。换句话说,如果需要维护引用,这种方法就不会起作用。
var obj = {
foo: undefined,
bar: ''
};
var cleanObj = JSON.parse(JSON.stringify(obj));
// For dispaly purposes only
document.write(JSON.stringify(cleanObj, null, 2));

额外的好处是没有任何特殊的逻辑,它可以在任何深度工作:
var obj = {
foo: {
far: true,
boo: undefined
},
bar: ''
};
var cleanObj = JSON.parse(JSON.stringify(obj));
// For dispaly purposes only
document.write(JSON.stringify(cleanObj, null, 2));

如果是字符串值' undefined'您可以使用相同的方法但使用replacer
函数:
var obj = {
foo: {
far: true,
boo: 'undefined'
},
bar: ''
};
var cleanObj = JSON.parse(JSON.stringify(obj, replacer));
function replacer(key, value) {
if (typeof value === 'string' && value === 'undefined') {
return undefined;
}
return value;
}
// For dispaly purposes only
document.write(JSON.stringify(cleanObj, null, 2));

答案 1 :(得分:1)
如果您喜欢 removeNullorUndefined()当前有效的方式,那么您可以尝试:
items.forEach(function(item){ removeNullorUndefined(item); });