как определить, существует ли пара ключ-значение в объекте json с помощью оператора switch

#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)}"`);