查看对象数组并从其属性中删除undefined

Look through an array of objects and remove undefined from its property

本文关键字:属性 删除 undefined 对象 数组      更新时间:2023-09-26

我有一个对象数组,我想从任何对象中的任何属性中删除'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;
        },

我如何修改它,使它也可以接受一个对象数组,并从中删除'undefined' ?

感谢您的宝贵意见

只要值是undefined而不是'undefined'的字符串值,那么一种方法是使用JSON.stringify。引用属性值:

如果在转换过程中遇到未定义的函数或符号,则省略(当它在对象中找到时)或删除为空(当它在数组中找到时)。JSON。当传入JSON.stringify(function(){})或JSON.stringify(undefined)等"纯"值时,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));

如果您喜欢removeNullorUndefined()当前的工作方式,那么您可以尝试:

items.forEach(function(item){ removeNullorUndefined(item); });