2012-06-19 2 views
2

Заранее спасибо всем, кто может думать о более эффективной или лучший способ сделать то, что ниже делает мой код JavaScript:Может кто-нибудь помочь мне найти лучшую альтернативу этому 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». Пока это работает, похоже, что это может быть медленным и немного громоздким. Если есть лучший способ? Если нет, то не проблема, но большую часть времени, когда я делаю то, что мне кажется неправдой, это не так! Поэтому я подумал, что попрошу С.О.

Спасибо :)

+0

возможный дубликат [Проверить равенство переменной на список значений] (http://stackoverflow.com/questions/4728144/check-variable-equality-against-a-list-of-values) – pimvdb

+0

@pimvdb полезное чтение, спасибо – GhostInTheSecureShell

ответ

6

Более поздние браузеры поддерживают Array.filter:

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

Для более старых браузеров, однако, для цикла дано Марк Линус, хорошо.

+0

Ницца! Не знал об этом! – jsalonen

+0

Спасибо, я поклонник короткого и легко читаемого кода. Как уже упоминалось ниже, Regexes не облагаются налогами на современные браузеры, я думаю, что это очень хорошо исправляет мою проблему. Может ли кто-нибудь увидеть, что мобильный Safari имеет проблемы с циклом, хотя массив элементов 250-300 с этим методом? Это не критично, но если этот код будет хорошо работать на устройствах iOS, это будет бонус! – GhostInTheSecureShell

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); 
    } 
} 
+0

Является ли это регулярным выражением? Извините, я не отлично разбираюсь в Javascript ... – GhostInTheSecureShell

+0

Да, сырое и простое выражение: –

+0

Brilliant, thanks :) Регулярно ли требуются регулярные выражения в браузерах? – GhostInTheSecureShell

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); 
    } 
} 
+0

Нет, 'in' проверяет ключи, которые являются' 0, 1, 2, ... 'в массивах. Вместо этого используйте 'indexOf'. – pimvdb

+0

Да, есть некоторые ошибки –

+0

Очень верно. должны быть исправлены. – jsalonen

0

Если вы готовы использовать jQuery you can use grep() и написать это:

Fiddle here

var availableChars = ["a", "b", "c", '1', 'i', 'o', "9"]; 
var result = $.grep(availableChars, function(c) { 
    return !c.match(/[^il10o]/i) 
}) 
document.write(result)​ 
+1

Это по существу возвращает массив символов в регулярном выражении. Я думаю, вы хотели отрицать. – pimvdb

+0

Хороший улов. Благодарю. – Cuadue

0

фильтр хорош, но простая строка замены работает без 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 
Смежные вопросы