Javascript检查对象及其嵌套对象的所有值
您好,我目前遇到了这样一个问题:检查一个有另一个嵌套对象的对象中的所有值是否为null或0 我的目标如下:Javascript检查对象及其嵌套对象的所有值,javascript,nested-object,Javascript,Nested Object,您好,我目前遇到了这样一个问题:检查一个有另一个嵌套对象的对象中的所有值是否为null或0 我的目标如下: { "city":0, "road":{ "max":null, "min":null }, "size":{ "max":null, "min":null }, "type":null, "ward":0, "floor":null, "price":{ "max":null
{
"city":0,
"road":{
"max":null,
"min":null
},
"size":{
"max":null,
"min":null
},
"type":null,
"ward":0,
"floor":null,
"price":{
"max":null,
"min":null
},
"street":0,
"toilet":null,
"balcony":null,
"bedroom":null,
"district":0,
"frontend":{
"max":null,
"min":null
},
"direction":null,
"living_room":null
}
我需要检查其中的每个值是否为0或null,如果所有值都为0或null,则返回true,如果任何值不同于null或0,则返回false
我不能使用:
Object.valuesobject.everyi=>i==null | | i==
返回false,因为嵌套对象仍然被认为是与0和null 不同的值。
我不想写超长的if条件,每次检查它的每一个值
是否仍要对对象及其嵌套对象进行迭代以进行检查?一个不雅观的选项是使用JSON.stringify和回调,并且每当找到0或null以外的值时,设置一个标志: 常量对象={ 城市:0, 道路:{ max:null, min:null }, 尺寸:{ max:null, min:null }, 类型:销售, 病房:0,, 楼层:空, 价格:{ max:null, min:null }, 街道:0,, 厕所:空, 阳台:空, 卧室:空, 地区:0,, 前端:{ max:null, min:null }, 方向:空, 客厅:空 }; 让allZeroNull=true; JSON.stringifyobj,key,val=>{ 如果val!='object'&&val!==0{ allZeroNull=false; } 返回val; };
console.logallZeroNull 一个不雅观的选项是将JSON.stringify与回调一起使用,并且每当找到0或null以外的值时,设置一个标志: 常量对象={ 城市:0, 道路:{ max:null, min:null }, 尺寸:{ max:null, min:null }, 类型:销售, 病房:0,, 楼层:空, 价格:{ max:null, min:null }, 街道:0,, 厕所:空, 阳台:空, 卧室:空, 地区:0,, 前端:{ max:null, min:null }, 方向:空, 客厅:空 }; 让allZeroNull=true; JSON.stringifyobj,key,val=>{ 如果val!='object'&&val!==0{ allZeroNull=false; } 返回val; };
console.logallZeroNull 您可以采用迭代和递归的方法 函数检查对象{ return Object.valuesobject.everyv=>v&&typeof v==='Object' ?检查 :v==0 | | v==null ; } var data0={城市:0,道路:{max:null,min:null},大小:{max:null,min:null},类型:销售,病房:0,楼层:null,价格:{max:null,min:null},街道:0,卫生间:null,阳台:null,卧室:null,地区:0,前端:{max:null,min:null},方向:null,客厅:null}, 数据1={城市:0,道路:{max:null,min:null},大小:{max:null,min:null},类型:null,病房:0,楼层:null,价格:{max:null,min:null},街道:0,卫生间:null,阳台:null,卧室:null,地区:0,前端:{max:null,min:null},方向:null,客厅:null}; console.logcheckdata0;//错误,因为类型:sell
console.logcheckdata1;//true您可以采用迭代和递归的方法 函数检查对象{ return Object.valuesobject.everyv=>v&&typeof v==='Object' ?检查 :v==0 | | v==null ; } var data0={城市:0,道路:{max:null,min:null},大小:{max:null,min:null},类型:销售,病房:0,楼层:null,价格:{max:null,min:null},街道:0,卫生间:null,阳台:null,卧室:null,地区:0,前端:{max:null,min:null},方向:null,客厅:null}, 数据1={城市:0,道路:{max:null,min:null},大小:{max:null,min:null},类型:null,病房:0,楼层:null,价格:{max:null,min:null},街道:0,卫生间:null,阳台:null,卧室:null,地区:0,前端:{max:null,min:null},方向:null,客厅:null}; console.logcheckdata0;//错误,因为类型:sell
console.logcheckdata1;//true您可以创建一个函数fn,该函数使用Object.values获取值数组,使用array.every进行迭代,如果值是对象,则对其使用fn: 常数fn=数据=> Object.valuesdata .everyv=>{ ifv==null | | v==0返回true; 返回typeof v==='object'?fnv:false; } const data={city:0,road:{max:null,min:null},size:{max:null,min:null},type:sell,ward:0,floor:null,price:{max:null,min:null},street:0,卫生间:null,阳台:null,卧室:null,地区:0,前端:{max:null,min:null},方向:null,客厅:null} 常量结果=fndata
console.logresult您可以创建一个函数fn,该函数使用Object.values获取一个值数组,使用array.every进行迭代,如果该值是一个对象,则对其使用fn: 常数fn=数据=> Object.valuesdata .everyv=>{ ifv==null | | v==0返回true; 返回typeof v==='object'?fnv:false; } const data={city:0,road:{max:null,min:null},size:{max:null,min:null},type:sell,ward:0,floor:null,price:{max:null,min:null},street:0,卫生间:null,阳台:null,卧室:null,district:0,frontend:{ max:null,min:null},方向:null,客厅:null} 常量结果=fndata
console.logresults如果每个v等于null或0,它不应该返回true吗?还是我弄错了?没错。但是你有类型:sell,它不是null或零。哦,是的,我的糟糕忘记编辑它了,类型应该是null,如果每个v等于null或0,它不应该返回true吗?还是我弄错了?没错。但是你有类型:sell,它不是null或零。哦,是的,我的错忘了编辑它,类型应该是null,它。。。很傻但给人留下深刻印象值得投票。。。虽然愚蠢但令人印象深刻,值得投票表决。