Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Существование элемента в массивах, в каком массиве он есть? 
V
    Опции темы
vitalina
Дата 17.11.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.11.2007
Где: Riga

Репутация: -1
Всего: -4



Есть, например, три массива:
("а", "и", "т")
("б", "к", "у")
("в", "л", "ф")

Не могу сообразить как сделать: пользователь ввёл в поле букву "к", скрипт проверяет в каком массиве эта буква и выводит число 2. В дальнейшем я планирую суммировать эти числа, но думая с этим я сама справлюсь.

--------------------
kornienko.ru - мой настоящий проект.
PM MAIL WWW Skype   Вверх
Amphiluke
Дата 17.11.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



А нельзя что-ли все массивы последовательно просмотреть?
Код

<script type="text/javascript">
    var arr1 = ["а", "и", "т"];
    var arr2 = ["б", "к", "у"];
    var arr3 = ["в", "л", "ф"];
    
    function whereLetterLocated(letter) {
        var str = arr1.join(";");
        if (str.indexOf(letter) != -1)
            return 1;
        str = arr2.join(";");
        if (str.indexOf(letter) != -1)
            return 2;
        str = arr3.join(";");
        if (str.indexOf(letter) != -1)
            return 3;
        return -1;
    }
    
    alert(whereLetterLocated("к"));
</script>

PM   Вверх
vitalina
Дата 17.11.2009, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.11.2007
Где: Riga

Репутация: -1
Всего: -4



Как-то всё сложно, а проще нельзя? У меня работает, но почему-то алерт выскакивает 2 раза...

Добавлено через 3 минуты и 2 секунды
Знаю зачем document.write, а зачем return? А return -1?

Добавлено через 5 минут и 30 секунд
Почему используется return, а не document.write?
--------------------
kornienko.ru - мой настоящий проект.
PM MAIL WWW Skype   Вверх
Amphiluke
Дата 17.11.2009, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Цитата(vitalina @  17.11.2009,  14:48 Найти цитируемый пост)
У меня работает, но почему-то алерт выскакивает 2 раза...

Один из них — точно не мой.  smile 


Цитата(vitalina @  17.11.2009,  14:48 Найти цитируемый пост)
Знаю зачем document.write, а зачем return? А return -1?

return необходим для того, чтобы функция вернула значение. Использовать метод document.write в можно исключительно во время загрузки страницы, а функции можно всегда, например, при возникновении события (кнопку нажали, курсор переместили и проч.).

return -1 выполнится в том случае, если пользователь введет буковку, которая вообще не встречается ни в одном массиве.

Добавлено через 2 минуты и 17 секунд
В вашем случае использовать метод document.write нельзя, т.к. требуется реакция на событие — пользователь ввел букву с клавиатуры.
PM   Вверх
vitalina
Дата 17.11.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.11.2007
Где: Riga

Репутация: -1
Всего: -4



А если буковки, допустим в 2 полях, эти поля надо проверять по очереди? А если 9 полей по 1 букве? Можно ли эту проверку сделать одним махом?

Добавлено через 7 минут и 41 секунду
Если id формы =t1 писать alert(whereLetterLocated(t1));? У меня так пишет -1.
--------------------
kornienko.ru - мой настоящий проект.
PM MAIL WWW Skype   Вверх
Amphiluke
Дата 17.11.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Цитата(vitalina @  17.11.2009,  15:05 Найти цитируемый пост)
А если буковки, допустим в 2 полях, эти поля надо проверять по очереди? А если 9 полей по 1 букве? Можно ли эту проверку сделать одним махом?

Можно (почти) всё при наличии соответствующего опыта. При правильном построении страницы поля ввода должны находиться на форме. Назначьте форме идентификатор id, а полям какой-нибудь класс (например, class="inputField"), и когда пользователь введет все буковки и (я полагаю) нажмет на кнопочку, вызовите функцию, которая переберёт все поля на форме при помощи метода getElementsByTagName("input"), проверяя по ходу, обладает ли элемент формы соответствующим классом "inputField". Если обладает, то считать с поля значение value и выполнить ранее написанную функцию whereLetterLocated() (см. пост 2).

Я понимаю, что (наверное) звучит неперевариваемо, но на самом деле нужно немного почитать теорию, и тогда все станет просто и ясно... smile 

Цитата(vitalina @  17.11.2009,  15:05 Найти цитируемый пост)
Если id формы =t1 писать alert(whereLetterLocated(t1));? У меня так пишет -1.

Функция ждет, что вы будете передавать не id, а букву которую ввел пользователь (т.е. значение value поля).

Это сообщение отредактировал(а) Amphiluke - 17.11.2009, 15:20
PM   Вверх
vitalina
Дата 17.11.2009, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.11.2007
Где: Riga

Репутация: -1
Всего: -4



Объясните мне эту строчку: str.indexOf(text1.value) != -1
--------------------
kornienko.ru - мой настоящий проект.
PM MAIL WWW Skype   Вверх
Amphiluke
Дата 17.11.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Я с помощью метода join превращаю массив в строку из элементов массива. Метод indexOf проверяет, есть ли в строке указанный символ. Если есть, то indexOf возвращает позицию символа, а если нет, то возвращает -1. Это, на мой взгляд, самый простой способ проверить, есть ли буква в массиве...

Добавлено через 8 минут и 39 секунд
Вот что получилось у меня... smile 
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Документ без названия</title>
<script type="text/javascript">
    var arr1 = ["а", "и", "т"];
    var arr2 = ["б", "к", "у"];
    var arr3 = ["в", "л", "ф"];
    
    function whereLetterLocated(letter) {
        var str = arr1.join(";");
        if (str.indexOf(letter) != -1)
            return 1;
        str = arr2.join(";");
        if (str.indexOf(letter) != -1)
            return 2;
        str = arr3.join(";");
        if (str.indexOf(letter) != -1)
            return 3;
        return -1;
    }
    
    function checkAllFields() {
        var __form = document.getElementById("_form");
        var resultArr = new Array(); // это массив номеров, где встречаются буквы
        for (var i = 0; i < __form.elements.length; i++) {
            if (__form.elements[i].className == "inputField") {
                resultArr.push(whereLetterLocated(__form.elements[i].value));
            }
        }
        return resultArr;
    }
</script>
</head>

<body>
<form action="#" id="_form">
    <input type="text" class="inputField" /><br />
    <input type="text" class="inputField" /><br />
    <input type="text" class="inputField" /><br />
    <input type="text" class="inputField" /><br />
    <input type="text" class="inputField" /><br />
    <input type="text" class="inputField" /><br />
    <input type="button" value="Ready" onclick="alert(checkAllFields());" />
</form>
</body>
</html>

PM   Вверх
vitalina
Дата 17.11.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.11.2007
Где: Riga

Репутация: -1
Всего: -4



Спасибо, буду разбираться!
--------------------
kornienko.ru - мой настоящий проект.
PM MAIL WWW Skype   Вверх
vitalina
Дата 17.11.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.11.2007
Где: Riga

Репутация: -1
Всего: -4



6 полей, я буквы ввела в первые 3, а почему алерт говорит, что в трёх последний полях буквы в массивах 1?

Добавлено через 10 минут и 35 секунд
Цитата(Amphiluke @  17.11.2009,  14:42 Найти цитируемый пост)
 var str = arr1.join(";");
        if (str.indexOf(letter) != -1)



Я всё-таки не поняла почему -1? Почему алерт ввыводит запятую, когда мы не давали такой команды?
--------------------
kornienko.ru - мой настоящий проект.
PM MAIL WWW Skype   Вверх
vitalina
Дата 17.11.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.11.2007
Где: Riga

Репутация: -1
Всего: -4



А если слова в алерте написать ещё надо? Так: return "ok" resultArr; у меня не работает. Как правильно?
--------------------
kornienko.ru - мой настоящий проект.
PM MAIL WWW Skype   Вверх
Amphiluke
Дата 17.11.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Цитата(vitalina @  17.11.2009,  16:25 Найти цитируемый пост)
6 полей, я буквы ввела в первые 3, а почему алерт говорит, что в трёх последний полях буквы в массивах 1?

Значит, так оно и есть. Все массивы содержат «cимвол» "" (пустой). Но если нужно избежать этого эффекта, то придется предусмотреть этот случай явно.
Код

    function whereLetterLocated(letter) {
        if (letter == "")
            return -1;
        var str = arr1.join(";");
        if (str.indexOf(letter) != -1)
            return 1;
        str = arr2.join(";");
        if (str.indexOf(letter) != -1)
            return 2;
        str = arr3.join(";");
        if (str.indexOf(letter) != -1)
            return 3;
        return -1;
    }



Цитата(vitalina @  17.11.2009,  16:45 Найти цитируемый пост)
А если слова в алерте написать ещё надо? Так: return "ok" resultArr; у меня не работает. Как правильно?

Определитесь, что конкретно вы хотите видеть на выходе. Если строку, то измените так:
Код

return "ok " + resultArr.join(",")


P.S. Я использую alert лишь для примера, вы можете выводить результат на страницу (только не через document.write). А массив возвращается лишь только потому, что вы говорили о необходимости дальнейшей работы с этими числами.
Цитата(vitalina @  17.11.2009,  13:49 Найти цитируемый пост)
В дальнейшем я планирую суммировать эти числа



Это сообщение отредактировал(а) Amphiluke - 17.11.2009, 17:14
PM   Вверх
vitalina
Дата 17.11.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.11.2007
Где: Riga

Репутация: -1
Всего: -4



Хм... большое спасибо! 

Раньше я поле1 + поле2, а сейчас что-то не соображу. а тут наверное больше кода будет, если суммировать сразу все числа...

Добавлено через 1 минуту и 57 секунд
Нету же sum(__form.elements[i].value)
--------------------
kornienko.ru - мой настоящий проект.
PM MAIL WWW Skype   Вверх
Amphiluke
Дата 17.11.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Цитата(vitalina @  17.11.2009,  17:23 Найти цитируемый пост)
Нету же sum(__form.elements[i].value)

Ну дак написать недолго:
Код

    function sum(arr) {
        var __sum = 0;
        for (var i = 0; i < arr.length; i++) {
            __sum += arr[i];
        }
        return __sum;
    }


Добавлено через 2 минуты и 52 секунды
P.S. А массив, который передается в эту функцию уже получен в функции checkAllFields.
PM   Вверх
vitalina
Дата 17.11.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.11.2007
Где: Riga

Репутация: -1
Всего: -4



Как много кода! Какой файл огромный!
--------------------
kornienko.ru - мой настоящий проект.
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0556 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.