查看对象数组并从其属性中删除undefined
Look through an array of objects and remove undefined from its property
我有一个对象数组,我想从任何对象中的任何属性中删除'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); });
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 未捕获的类型错误:无法读取属性'删除'的未定义
- 在不知道深度或父属性的情况下从对象中删除属性
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 如何从对象中删除属性
- 如何选择多个输入字段并删除所需的属性
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 如果另一个属性相同,请删除该属性
- 为什么toStaticHTML删除data-*属性
- 使用jQuery添加和删除属性
- AngularJS-深层对象'属性删除
- 无法读取空放置区的属性“删除子项”
- 如何使用jquery按数据属性删除li标签
- JavaScript 属性删除如果为假,则不删除,如果为真循环
- 如何使用HTML数据集属性删除data-*属性
- Javascript -将属性拉入数组/根据属性删除项
- 如何使用select标签的title属性删除选中的选项
- jquery:通过指定数据属性删除元素
- 基于属性删除对象
- javascript属性删除