2009-11-25 11 views
3

У меня есть поиск по довольно большому количеству вопросов, но havent нашел тот, который, как мне кажется, подходит для моего счета, поэтому, если вы знаете, пожалуйста, обратитесь к нему.Javascript Проверка массива на наличие определенного номера

У меня есть массив, который я хочу найти для определенного числа, и если это число находится в массиве, тогда я хочу принять действие, а если нет, то другое действие.

У меня есть что-то вроде этого

var Array = ["1","8","17","14","11","20","2","6"]; 

for(x=0;x<=Array.length;x++) 
{ 
    if(Array[x]==8) 
     then change picture.src to srcpicture1 
    else 
     then change picture.src to srcpicture2 
} 

, но это будет работать длину массива и в конечном итоге проверки последний элемент массива и так как последний элемент не 8, то это изменит картину picture2.

Теперь я вижу, почему это происходит, у меня просто нет идей относительно того, как проверить, содержит ли массив определенный номер.

Заранее спасибо.

+0

Я предлагаю вам не использовать Array в качестве имени переменной. Даже если он работает (я не уверен), это может вызвать проблемы. –

+0

Я знаю, я не на самом деле, я забыл написать myArray –

ответ

8

Что вы можете сделать, это написать себе функцию, чтобы проверить, если элемент принадлежит к массиву:

function inArray(array, value) { 
    for (var i = 0; i < array.length; i++) { 
     if (array[i] == value) return true; 
    } 
    return false; 
} 

И вобще:

var arr = ["1","8","17","14","11","20","2","6"]; 
if (inArray(arr, 8)) { 
    // change picture.src to srcpicture1 
} else { 
    // change picture.src to srcpicture2 
} 

Это намного более читаемым мне.


Для дополнительных очков вы можете добавить функцию к прототипу массива следующим образом:

Array.prototype.has = function (value) { 
    for (var i = 0; i < this.length; i++) { 
     if (this[i] === value) return true; 
    } 
    return false; 
}; 

И тогда вызов будет

if (arr.has(8)) // ... 

Нажатие еще дальше, вы можете проверить для метода indexOf() по массиву и использовать его - если нет - замените его на код выше.


P.S. Попытайтесь не использовать Array для имени переменной, так как он зарезервирован для фактического типа массива.

+0

Спасибо Эмиль. Это звучит как отличная идея, я пытаюсь, если теперь –

+7

Должен быть обнаружен метод indexOf и использовать его, если он доступен ... – James

+2

Могу я сказать - не модифицировать прототип прототипов buidl-in? Только если вам нужно ... О вашем вопросе - здесь есть хорошая и легкая (!) Библиотека под названием underscore.js. 50 полезных методов для работы с массивом и т. Д. Попробуйте. Вам удобно работать с AND, чтобы учиться;) http://documentcloud.github.com/underscore/ – NilColor

3

Почему не только вы прервать цикл, когда вы найдете правильный номер:

for(x=0;x<=Array.length;x++) 
{ 
    if(Array[x]==8) { 
     //change picture.src to srcpicture1 
     break; 
    } 
} 
+0

Вот что мне нужно, спасибо! – eshellborn

0

Можно сортировать массив первого затем проверить массив только до точки, в которой число будет в массив, если бы он существовал.

0

Если у вас есть уникальные ключи и быстрее поиска является то, что вы заботитесь о много, вы можете рассмотреть возможность использования карты вместо (если есть жесткий случай использования массива, то это, конечно, не будет работать). Если вы используете карту, вы просто проверяете «if (num in arr)».