Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.05.2012, 11:43
Интересующийся
Отправить личное сообщение для stp008 Посмотреть профиль Найти все сообщения от stp008
 
Регистрация: 29.05.2012
Сообщений: 10

Принцип работы цикла 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);
Ответить с цитированием
  #2 (permalink)  
Старый 29.05.2012, 11:47
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

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

В данном случае вы ищите число 2 в массиве ['a', -1, 2, 'b']. Это число расположено на 3-ем месте.
Т.к. индексация массива начинается с 0, переменная index принимает значение 2.
Ответить с цитированием
  #3 (permalink)  
Старый 29.05.2012, 12:00
Интересующийся
Отправить личное сообщение для stp008 Посмотреть профиль Найти все сообщения от stp008
 
Регистрация: 29.05.2012
Сообщений: 10

Спасибо за ответ, но я немного не то имел ввиду. Я не понимаю, помечу выводится одно число,а не 4. Файнд перебирает значения и, если совпадает, выводит индекс,а если нет, то -1. Соотвественно я ожидал в алерте увидеть [-1, -1, 2, -1] (при 0 индексе искомый элемент не найден, соотвественно возвращает -1, на втором не найден - возращает -1 и т.д.). А в на самом деле алертит одинокое число 2. Я это не могу понять, к сожалению.
Ответить с цитированием
  #4 (permalink)  
Старый 29.05.2012, 12:09
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

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 собирает результаты в массив и возвращает уже не одно значение, а массив.
Ответить с цитированием
  #5 (permalink)  
Старый 29.05.2012, 12:22
Интересующийся
Отправить личное сообщение для stp008 Посмотреть профиль Найти все сообщения от stp008
 
Регистрация: 29.05.2012
Сообщений: 10

Спасибо большое)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Легки фреймворки для работы с SVG general Events/DOM/Window 0 26.11.2011 20:06
Ищу библиотеки для работы с 3D Бобр Общие вопросы Javascript 3 06.08.2010 17:02
Принцип работы счетчика liveinternet paveljava5 Общие вопросы Javascript 5 02.08.2010 11:53
Поиск работы JavaScript staff-base Работа 9 12.03.2010 19:06
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31