Создайте функцию find(arr, value), которая ищет в массиве arr значение value и возвращает его номер, если найдено или -1, если не найдено.
Например:
arr = [ "test", 2, 1.5, false ]; find(arr, "test"); // 0 find(arr, 2); // 1 find(arr, 1.5); // 2 find(arr, 0); // -1
Решение
Решение
Возможное решение:
function find(array, value) {
for(var i=0; i<array.length; i++) {
if (array[i] == value) return i;
}
return -1;
}
Однако, в нем ошибка, т.к. сравнение == не различает 0 и false.
Поэтому лучше использовать ===. Кроме того, в современном стандарте JavaScript существует встроенная фунция Array#indexOf, которая работает именно таким образом. Имеет смысл ей воспользоваться, если браузер ее поддерживает.
function find(array, value) {
if (array.indexOf) { // если метод существует
return array.indexOf(value);
}
for(var i=0; i<array.length; i++) {
if (array[i] === value) return i;
}
return -1;
}
var arr = ["a", -1, 2, "b"];
var index = find(arr, 2);
alert(index);
… Но еще лучшим вариантом было бы определить find по-разному в зависимости от поддержки браузером метода indexOf:
// создаем пустой массив и проверяем поддерживается ли indexOf
if ( [].indexOf ) {
var find = function(array, value) {
return array.indexOf(value);
}
} else {
var find = function(array, value) {
for(var i=0; i<array.length; i++) {
if (array[i] === value) return i;
}
return -1;
}
}
Этот способ - лучше всего, т.к. не требует при каждом запуске find проверять поддержку indexOf.
#32