直接进入主题:过滤对象中的,”“、null、 undefined,并返回新数组
比如以下参数值
var pd = {
a : "a",
b : "b",
c : "",
d:undefined,
e:null
}
对于pa对象参数中,不需要c,d,e的话,我们可能会这么写
function re(){
var param = {};
if (pd.a!=null && pd.a!=undefined && pd.a != "" ) param.a=pd.a;
if (pd.b!=null && pd.b!=undefined && pd.b != "" ) param.b=pd.b;
if (pd.c!=null && pd.c!=undefined && pd.c != "" ) param.a=pd.c;
if (pd.d!=null && pd.d!=undefined && pd.d != "" ) param.d=pd.d;
if (pd.e!=null && pd.e!=undefined && pd.e != "" ) param.a=pd.e;
return param;
}
看着超级麻烦,如果这个pd对象中参数有很多比如一百个。。。。
之后有了一下的改进方法:
function dealElement(obj){
var param = {};
if ( obj === null || obj === undefined || obj === "" ) return param;
for ( var key in obj ){
if ( obj[key] !== null && obj[key] !== undefined && obj[key] !== "" ){
param[key] = obj[key];
}
}
return param;
}
dealElement()这个方法确实可以满足现有的需求,能够正确的返回值;后来又想到了以下的情况:
var pd = {
a : "a",
b : "b",
c : "",
d:undefined,
e:null,
f:{
f_a : "f_a",
f_b:undefined,
f_c:null,
f_d:"",
f_e:{
f_e_a:"f_f_a",
f_e_b:undefined,
f_e_c:null,
f_e_d:""
}
}
}
对象里面包又包含了一个对象列表,里面也需要过滤”“、null、 undefined,这时候上面的方法就不满足了;
所以将上面的方法改进了下
(已收录到方法库中:javascript常用方法整理;(不断更新)):
其中dataType()方法在方法库中;
/**
* 处理对象参数值,排除对象参数值为”“、null、undefined,并返回一个新对象
**/
function dealObjectValue(obj){
var param = {};
if ( obj === null || obj === undefined || obj === "" ) return param;
for ( var key in obj ){
if ( dataType(obj[key]) === "Object" ){
param[key] = dealObjectValue(obj[key]);
}else if( obj[key] !== null && obj[key] !== undefined && obj[key] !== "" ){
param[key] = obj[key];
}
}
return param;
};