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

时间:2016-08-11 22:55:21

标签: javascript arrays

我有一系列对象,我想删除' 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;

        },

如何修改它,以便它也可以接受一系列对象并删除未定义的对象。从它?

感谢任何输入

2 个答案:

答案 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); });