2009-11-25 8 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)».

 Смежные вопросы

  • Нет связанных вопросов^_^