Le verbiage était un peu gênant ici, mais je sais qu'il existe une façon intelligente de procéder. Je demande des données à un objet JSON. Cet objet JSON aura soit une "ville", "ville" ou "locale". Il n'en aura jamais qu'un. J'ai des vérifications verbeuses en couches «si non définies» qui s'empilent les unes sur les autres jusqu'à ce que je trouve la bonne, mais j'imagine qu'en utilisant des opérateurs, il doit y avoir un meilleur moyen. Ce code fonctionne, je crois juste qu'il peut être mieux fait. Voici un exemple:

var town = response.data["locale"];
  if(town === undefined){
    town = response.data["town"];
    if(town === undefined){
      town = response.data["city"];
      if(town === undefined){
        town = "N/A";
      }
    }
  }

Comme vous pouvez le voir, je veux simplement affecter ma variable à celle qui existe. Je trouve que cette déclaration «if» imbriquée est une horreur complète. Peut-être que mon problème peut aider les gens à écrire du code plus propre à l'avenir. Je ne suis pas très doué pour les opérateurs, mais cette situation ne semble pas nécessiter l'utilisation d'opérateurs ternaires.

0
macmeyers50 2 sept. 2020 à 21:33

2 réponses

Meilleure réponse

Vous pouvez utiliser l'opérateur or (||) lors de la définition d'une variable par exemple. Il vérifie si le premier n'est pas défini, et si c'est le cas, il essaiera d'utiliser le second, etc.

Dans votre cas, vous pouvez simplement le remplacer par cette ligne.

let town = response.data["locale"] || response.data["town"] || response.data["city"] || "N/A";
2
Paul 2 sept. 2020 à 18:37

Vous avez tagué la question avec nullish coalescing ?? est presque exactement équivalent:

let town = response.data.locale ?? response.data.town ?? response.data.city ?? "N/A";

Et vous pouvez éviter de répéter response aussi:

let {data} = response;
let town = data.locale ?? data.town ?? data.city ?? "N/A";

(Je dis "presque exactement équivalent" car il s'appuiera également sur la valeur null, pas seulement undefined.)

3
Ry- 2 sept. 2020 à 18:37