Один (не элегантный) вариант - использовать JSON.stringify
с обратным вызовом, и всякий раз, когда найдено значение, отличное от 0 или ноль, установите флаг:
const obj = {
"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,
"toilet":null,
"balcony":null,
"bedroom":null,
"district":0,
"frontend":{
"max":null,
"min":null
},
"direction":null,
"living_room":null
};
let allZeroNull = true;
JSON.stringify(obj, (key, val) => {
if (typeof val !== 'object' && val !== 0) {
allZeroNull = false;
}
return val;
});
console.log(allZeroNull);
Или, чтобы сделать это более вручную, с коротким замыканием:
const obj = {
"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,
"toilet":null,
"balcony":null,
"bedroom":null,
"district":0,
"frontend":{
"max":null,
"min":null
},
"direction":null,
"living_room":null
};
const isAllZeroNull = (item) => {
if (typeof item === 'object' && item !== null) {
for (const val of Object.values(item)) {
if (!isAllZeroNull(val)) {
return false;
}
}
} else if (item !== 0 && item !== null) {
return false;
}
return true;
};
console.log(isAllZeroNull(obj));