Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Принцип работы цикла for (https://javascript.ru/forum/misc/28673-princip-raboty-cikla.html)

stp008 29.05.2012 11:43

Принцип работы цикла for
 
Здравствуйте. Начал изучать js и немного не понимаю почему указаный ниже код выводит число 2. По идее он должен перебирать и алертить все значения массива (в данном случае я ожидал вывода -1, -1, 2, -1),а он выводит только одно число 2.Объясните, пожалуйста, почему.
function find(array, 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);

Раед 29.05.2012 11:47

stp008,
Функция find ищет элемент value в массиве array и возвращает его индекс.

В данном случае вы ищите число 2 в массиве ['a', -1, 2, 'b']. Это число расположено на 3-ем месте.
Т.к. индексация массива начинается с 0, переменная index принимает значение 2.

stp008 29.05.2012 12:00

Спасибо за ответ, но я немного не то имел ввиду. Я не понимаю, помечу выводится одно число,а не 4. Файнд перебирает значения и, если совпадает, выводит индекс,а если нет, то -1. Соотвественно я ожидал в алерте увидеть [-1, -1, 2, -1] (при 0 индексе искомый элемент не найден, соотвественно возвращает -1, на втором не найден - возращает -1 и т.д.). А в на самом деле алертит одинокое число 2. Я это не могу понять, к сожалению.

Раед 29.05.2012 12:09

stp008,
1) Функция вызывается 1 раз. За 1 раз любая функция может вернуть только 1 значение (не считая массивы и объекты)

2) return выходит из функции. Как только было совпадение, цикл перестаёт работать и функция возвращает значение

3) Если вы всё же хотите получить несколько значений, то
function find(array, value) {
        var res = [];
        for(var i=0; i<array.length; i++) {
            if (array[i] == value) res[i] = i;
            else res[i] = -1;
        }
 
        return res;
    }
    var arr = ["a", -1, 2, "b"];
    var index = find(arr, 2);
 
    alert(index);

В этом примере функция find собирает результаты в массив и возвращает уже не одно значение, а массив.

stp008 29.05.2012 12:22

Спасибо большое)


Часовой пояс GMT +3, время: 16:58.