Rumah  >  Soal Jawab  >  teks badan

Gunakan pernyataan ifelse untuk mengendalikan gabungan berbilang pembolehubah

<p>Saya mempunyai dua pembolehubah seperti berikut:</p> <pre class="brush:php;toolbar:false;">var a = "active" //[Dua kemungkinan nilai aktif/tidak aktif] var b = "tidak aktif" //[Tiga kemungkinan nilai aktif/dikunci/dilumpuhkan] var hasil = "" if(a="aktif" && b="aktif") hasil = "a"; elif(a=="aktif" && b=="dikunci") hasil = "b" elif(a=="aktif" && b="dilumpuhkan") hasil = "c" elif(a=="tidak aktif" && b="aktif") hasil = "d" elif(a=="tidak aktif" && b=="dilumpuhkan") hasil = "e" elif(a=="tidak aktif" && b=="dikunci") hasil = "f"</pre> <p>Dalam JS, selain menggunakan ifelse untuk menyemak keadaan yang berbeza, apakah cara paling berkesan untuk menerangkan kemungkinan hasil? Sila berikan cadangan. </p>
P粉420958692P粉420958692404 hari yang lalu372

membalas semua(1)saya akan balas

  • P粉680087550

    P粉6800875502023-08-19 00:33:06

    Anda boleh menjadikan logik anda lebih dipacu data dengan menggunakan objek, contohnya:

    var outcomeMap = {
      active: {
        active: "a",
        locked: "b",
        disabled: "c"
      },
      inactive: {
        active: "d",
        locked: "e",
        disabled: "f",
      }
    };
    

    Anda kemudian boleh menggunakan a访问该对象,并访问嵌套对象的值来设置您的outcome pembolehubah, contohnya:

    var outcome = outcomeMap[a][b];
    

    Sila ambil perhatian bahawa jika a除了您提到的值之外还可以是任何其他值,最好在访问b之前检查outcomeMap[a]是否为undefined。如果您的环境支持,可以使用可选链来完成,例如:outcomeMap[a]?.[b];

    Sebagai alternatif, anda boleh menyediakan tatasusunan yang mengandungi gabungan yang mungkin dan kemudian mengulanginya untuk menyemak sama ada gabungan anda sepadan. Kemudian, berdasarkan indeks semasa, jika hasil ditemui, anda boleh mengindeks pada hasil anda (outcomes), contohnya:

    function getOutcome(a, b) {
      const aVals = ['active', 'inactive'];
      const bVals = ['active', 'locked', 'disabled'];
      const outcomes = [['a', 'b', 'c'], ['d', 'e', 'f']];
    
      for(const [i, aVal] of aVals.entries()) {
        for(const [j, bVal] of bVals.entries()) {
          if (aVal == a && bVal == b) {
            return outcomes[i][j];
          }
        }
      }
      // return ''; if you want a default value of empty string
    }
    const outcome = getOutcome('inactive','locked');
    console.log(outcome);

    Sila ambil perhatian bahawa tiada kaedah yang lebih cekap daripada menggunakan pernyataan if. Walau bagaimanapun, jika anda mempunyai lebih banyak kemungkinan, ia sepatutnya lebih mudah untuk skala.

    balas
    0
  • Batalbalas