2

以下の私のJavascriptコードが行うことを行うためのより効率的またはより良い方法を考えることができる人に事前に感謝します:

var availableCharacters=Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9");

for (counter=0; counter<availableCharacters.length; counter++){
  if(availableCharacters[counter]=="i"||
     availableCharacters[counter]=="l"||
     availableCharacters[counter]=="I"||
     availableCharacters[counter]=="L"||
     availableCharacters[counter]=="1"||
     availableCharacters[counter]=="0"||
     availableCharacters[counter]=="O"){
      availableCharacters.splice(counter, 1);
    }
}

私がやろうとしているのは、配列を実行し、その配列内の「i」、「l」、「I」、「L」、「1」、「0」、または「O」の要素を削除することです。これは機能しますが、遅くて少し面倒なようです。もっと良い方法があれば?そうでない場合は問題ありませんが、ほとんどの場合、自分には正しくないと思われることを行うと、そうではありません! だから私はSOに尋ねると思った

ありがとう :)

4

5 に答える 5

6

最近のブラウザのサポートArray.filter:

var availableCharacters = ........;
availableCharacters = availableCharacters.filter(function(a) {
  return !a.match(/[ilLI10O]/);
});

ただし、古いブラウザーの場合は、Mark Linus が提供する for ループが適しています。

于 2012-06-19T21:24:33.060 に答える
4
var availableCharacters=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
for (counter=0; counter<availableCharacters.length; counter++){
    if(/[ilIL10O]/.test(availableCharacters[counter])){
        availableCharacters.splice(counter, 1);
    }
}
于 2012-06-19T21:21:41.153 に答える
1

単純なフィルター リストを使用した代替ソリューション:

var availableCharacters=Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3",     "4", "5", "6", "7", "8", "9");
var filter = ['i', 'l', 'I', 'L', '1', '0', 'O'];
for (counter=0; counter<availableCharacters.length; counter++){
    if(filter.indexOf(availableCharacters[counter]) >= 0) {
        availableCharacters.splice(counter, 1);
    }
}
于 2012-06-19T21:23:03.337 に答える
0

jQueryをgrep()使用する場合は、次のように使用して記述できます。

ここでフィドル

var availableChars = ["a", "b", "c", '1', 'i', 'o', "9"];
var result = $.grep(availableChars, function(c) {
    return !c.match(/[^il10o]/i)
})
document.write(result)​
于 2012-06-19T21:29:19.393 に答える
0

filter は素晴らしいですが、単純な文字列置換は net-

   var availableCharacters=["a", "b", "c", "d", "e", "f", "g", "h", "i", 
   "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", 
   "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];

  var allowed= availableCharacters.join('').replace(/[iLl10O]/g,'').split('');

  returned value: (Array)
  a,b,c,d,e,f,g,h,j,k,m,n,o,p,q,r,s,t,u,v,w,x,y,z,2,3,4,5,6,7,8,9
于 2012-06-20T01:48:49.997 に答える