#javascript #json #switch-statement
#javascript #json #switch-statement
Вопрос:
json type :1
var x={
"address": {
"county": "abc",
"state_district": "asd",
"state": "test",
"country": "test1",
"country_code": "test"
}
}
Type:2
var x ={ "address": {
"suburb": "",
"city_district": "",
"city": "",
"county": "",
"state": "",
"postcode": "",
"country": "",
}}
type:3
var x= {"address": {
"amenity": "",
"road": "",
"town": "",
"county": "",
"state_district": "",
"state": "",
"postcode": "",
"country": "",
"country_code": ""
}
}
switch(x.address)
{
case 'city':
return x.address.city;
break;
case 'village':
return x.address.village;
break;
default:
alert('err');}
Это мой JSON-контент. address
свойство будет иметь некоторые дополнительные значения ключа в зависимости от местности city
, например, village
, suburb
, и т.д.
Мне нужно проверить, присутствует ли определенный ключ или нет, используя оператор switch. Пример JSON с дополнительным свойством показан выше.
Ответ №1:
В дополнение к ответу от Fiouze, вы также можете сделать следующее:
// will return true if the property exists.
'city' in x.address
// will return a value if set or undefined if not.
x.address.city
Но если вы хотите придерживаться случая переключения, вы можете выполнить итерацию по свойствам, выполнив что-то вроде:
for (const prop in x.address) {
switch (prop) {
case 'city':
return x.address.city;
case 'village':
return x.address.village;
default:
alert('err');
}
}
Ссылка: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for…in
Ответ №2:
Возможно, вы сможете использовать Object.prototype.hasOwnProperty()
if(x.address.hasOwnProperty('city')){
return x.address.city
}else if(x.address.hasOwnProperty('village')){
return(x.address.village)
}else{
alert('err')
}
See https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/hasOwnProperty
Ответ №3:
Переключатель предназначен для вычисления одного значения, а не нескольких имен свойств объекта.
Следующая функция fn()
дублирует назначение вашего блока переключения:
const myObject = {
"address": {
"amenity": "",
"road": "",
"town": "FAKE_TOWN",
"county": "",
"state_district": "",
"state": "",
"postcode": "",
"country": "",
"country_code": ""
}
};
function fn(obj) {
const {address} = obj;
// get value of the first property that exists
// note: `??` is the nullish coalescing operator
const val =
address.city ??
address.village ??
address.town;
// duplicate the `default` case behavior
if (val === undefined) {
alert('err');
return undefined;
}
return val;
}
console.log(`fn: "${fn(myObject)}"`);