1. ホーム
  2. javascript

[解決済み] Array.indexOf()で大文字と小文字を区別しないようにするにはどうしたらいいですか?

2023-06-08 03:55:14

質問

私は、配列にある名前のリストを持っていて、ランダムに名前を選ぶウェブサイトのためのコードの一部を作っています。これらの機能はすべてありますが、名前を削除する場合、ユーザーは配列のCaseと一致するように名前を入力する必要があります。私はそれがケースインシティブであるようにしようとしましたが、私は何か間違っているのでしょうか?

<html>
<!--Other code uneeded for this question-->
<p id="canidates"></p>
<body>
<input type="text" id="delname" /><button onclick="delName()">Remove Name from List</button>
<script>

//Array of names

var names = [];

//Other code uneeded for this question

//List of Canidates
document.getElementById('canidates').innerHTML = 
"<strong>List of Canidates:</strong> " + names.join(" | ");

//Other code uneeded for this question

//Remove name from Array

function delName() {
    var dnameVal = document.getElementById('delname').value;
    var pos = names.indexOf(dnameVal);
    var namepos = names[pos]
    var posstr = namepos.toUpperCase();
    var dup = dnameVal.toUpperCase();
    if(dup != posstr) {
        alert("Not a valid name");
        }
    else {
        names.splice(pos, 1);
        document.getElementById('canidates').innerHTML = 
        "<strong>List of Canidates:</strong> " + names.join(" | ");
        }
    }   
</script>
</body>
</html>

どのように解決するのですか?

簡単な方法は、すべての名前を大文字で含む一時的な配列を持っていることです。そうすれば、ユーザーの入力を比較することができます。つまり、次のようなコードになります。

function delName() {
    var dnameVal = document.getElementById('delname').value;
    var upperCaseNames = names.map(function(value) {
      return value.toUpperCase();
    });
    var pos = upperCaseNames.indexOf(dnameVal.toUpperCase());

    if(pos === -1) {
        alert("Not a valid name");
        }
    else {
        names.splice(pos, 1);
        document.getElementById('canidates').innerHTML = 
        "<strong>List of Canidates:</strong> " + names.join(" | ");
        }
    }

これがあなたの問題解決に役立つことを願っています。