11 янв. 2015 г.

Массивы

Команды объединяют в функции, а данные собирают в группы под названием “ассоциативные массивы”. Например, такие данные в нескольких переменных:


Петя = 'вспыльчивый'
Маша = 'красавица'
Зина = 'ябеда' 
 — можно объединить в ассоциативный массив “Одноклассники”:


Одноклассники = {
Петя: 'вспыльчивый',
Маша: 'красавица',
Зина: 'ябеда'
}

Обратите внимание, как изменились знаки препинания. Запятая ставится только между элементами массива.

Для того, чтобы использовать эти данные надо писать так:
Одноклассники.Петя
из ассоциативного массива Одноклассники мы достаем данные из внутреннего “ящичка” .Петя.

А если в таком массиве надо обновить данные, поступают как с обычными переменными Одноклассники.Петя = 'умник';

Доступ к данным можно получить не только через точку, как Одноклассники.Петя, но и с помощью такой записи:
 Одноклассники['Петя'];
без точки, но с квадратными скобками и кавычками. А результат одинаковый. Доступ с квадратными скобками нам понадобится в дальнейшем.

Называются элементы ассоциативного массива “ключами”. В ключе “Петя” сейчас находится текст “умник”. Но вообще в ассоциативный массив можно складывать не только цифры и тексты. Можно положить другой ассоциативный массив:
Одноклассники.Миша = { Ум: 4, Сила: 5, Юмор: 2 };

Из ключа .Миша данные будут доставаться так же:
Одноклассники.Миша.Сила

Например, alert(Одноклассники.Миша.Сила)

Введите в консоли название ассоциативного массива Одноклассники и увидите, какие в нем данные.

Добавить новый ключ в ассоциативный массив тоже просто:

Одноклассники.Витя = 'задира';
Одноклассники.Миша.Вес = 120;

Проверьте в консоли, что теперь хранится в Одноклассники

Ассоциативные массивы также называют объектами, и в них хранят информацию, которая вместе составляет нечто цельное. В консоли они выглядят как Object {}

Но в ассоциативном массиве неудобно хранить длинные списки. Например, для хранения месяцев нужно было бы создать такой ассоциативный массив:



Месяцы = {
месяц1: 'Январь',
месяц2: 'Февраль',
месяц3: 'Март',
месяц4: 'Апрель',
месяц5: 'Май',
месяц6: 'Июнь',
месяц7: 'Июль',
месяц8: 'Август',
месяц9: 'Сентябрь',
месяц10: 'Октябрь',
месяц11: 'Ноябрь',
месяц12: 'Декабрь'
}

Для того, чтобы использовать какой-то из месяцев в ассоциативном массиве, нужно писать Месяцы.месяц2, а еще нужно заранее знать названия всех ключей. Это не очень удобно.

Когда нужно сохранить какой-то список, информацию удобнее хранить не в ассоциативном, а в обычном массиве. Это список данных без ключей в квадратных скобках [ ]:


Друзья = [
'Саша',
'Женя',
'Ваня',
'Жанна'
]

Из такого массива информацию достают очень просто, по номеру в квадратных скобках [ ]. Только важно помнить особенность: нумерация начинается от нулевого пункта, и первый элемент имеет номер 0 вместо 1.


Друзья[0]

//это 'Саша'

Друзья[1]
//а это 'Женя'
А заменить информацию можно стандартным способом:
Друзья[1] = 'Евгений'

С помощью команды .length (длина) можно узнать количество записей в обычном массиве:
 Друзья.length

В обычный массив данные можно добавлять не только списком в квадратных скобках. Если массив уже существует, информацию добавляют командой .push() (переводится “толкать”), которую пишут через точку после имени массива:


Друзья.push('Люба')
//новый элемент 'Люба' в массиве Друзья

Так в конце списка массива появляется новая запись. Напишите в консоли Друзья, и посмотрите что теперь в массиве. Создайте свой собственный список с помощью массива. Пусть в нем хранятся заветные желания, друзья (просто имена) или что-то другое на ваше усмотрение.

Обычные массивы и ассоциативные предназначены для удобного хранения информации. Наряду с числами и текстами массивы являются типами данных.

Самостоятельно создайте html-файл, в котором будет 2 кнопки:
Кнопка “Следующее задание” будет показывать сообщение alert() со следующей записью из списка дел. Если все записи списка уже показаны (вспоминаем условие if(...){...}), нажатие на кнопку должно вызывать сообщение “Все задания выполнены!”.
Вторая кнопка “Начать заново” будет возвращать список дел к началу.

Сам список дел составьте на свое усмотрение. Кстати, в html-файле используйте только латинский шрифт. Для использования кириллицы (русских букв) надо вначале указать кодировку этим мы займемся позже.

Подсказка по выполнению:
— Для списка дел надо создать массив в теге <script>
— Дела должны показываться поочереди, от первого до последнего, значит нужно создать переменную, в которой будет номер дела. Тоже в <script>
— При нажатии кнопки onclick номер следующего дела должен увеличиваться. Дальше будет появляться нужная запись по номеру Список[номер] при условии, что номер следующего дела меньше длины списка.
— Если номер равен количеству элементов в списке, то такого дела уже нет, список кончился. Тогда надо счетчик дел обнулить и показать сообщение.
—  Для того, чтобы не было мешанины кода, надо создать функции, внутри которых будут все команды, а функции будут запускаться при клике onclick="Функция()"

15 комментариев:

  1. Алексей, здравсвуйте, извиняйте за элементарщину, но очень хочу понять логику действий. У меня вопрос по домашнему заданию, точнее по первой её части, по перечислению списка дел. Если не трудно, дайте пожалуйста подсказки и в каком направлении двигаться. Список дел должен перечисляться в одной строке кода через запятую или как, ниже пример
    .button onclick="alert('poyti v magazin');"> sledueshee zadanie </button
    ( там только poyti v magazin)
    на перечисление событий списка дел не знаю синтаксиса. Или должен быть создан массив другой строкой из которой бы вытягивалось нужное события и выводилось на alert? Спасибо) Задолбал же я вас.

    ОтветитьУдалить
    Ответы
    1. Спасибо за вопрос! Мне очень нужна обратная связь для улучшения учебника. Задание действительно сложное, и наверно, его надо упростить. Подсказку дописал в текст. Извините, что не сразу ответил.

      Удалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. Интересует домашние задание. Список дел должен быть реализован в виде массива?
    И как добиться, что бы после каждого нажатия на кнопку, выплывало новое задание. Я смог только сделать так, что они по очереди выскакивают, после первого нажатия.

    И как сделать счетчик нажатий, который будет обновляться после каждого нажатия, и когда достигнит допустим 5, выбило условие. if

    так бы кусок кода выглядел в java

    for (int i = 0; i < array.length; i++)
    {
    array[i] = reader.readLine();
    }

    if (array.length>2)
    {
    System.out.println("Vse");


    }

    ОтветитьУдалить
    Ответы
    1. Скорее всего, это задание сделаю отдельным уроком.

      Удалить
  4. Как тебя найти в вк или еще где-то. есть пару вопросов.

    ОтветитьУдалить
  5. По поводу пособия, отлично написано, интересно, правда упускаются кое какие моменты. Но думаю если ребенку будет интересно он уже сам найдет всю информацию. Скажу правда одно, мне 21, и я не все понял (Задача про список дел, заставила задуматься, хоть я владею java и азы с++ знаю. Нужно сделать обратную связь, тех. поддержку. И курс отдельный с задачами / и решениями. Очень интересно после решения задачи, глянуть как бы вы ее решили. Посмотрите курс javarush.ru Может что-то подчеркнете.

    ОтветитьУдалить
  6. Алексей, научите комментаторов пользоваться jsfiddle. И сами используйте как ответ на д/з. А то без "<" ">" не все поймут.
    Кстати, если я могу помочь, обращайтесь в hangouts или на почту solteke(dot)st(at)gmail(dot)com
    Могу помочь с тем что предложил ваш тезка или отвечать на вопросы интересующихся.
    Проект дельствительно хорош, не бросайте его;)

    ОтветитьУдалить
    Ответы
    1. В первую очередь постараюсь сделать так, чтобы техподдержка была не нужна. Для обратной связи пока хватает комментариев.

      Удалить
  7. Алексей, а можно делать еще более подробные массивы? Например:

    Одноклассники.Миша = { Ум: {4: хорошо}, {Сила: 5: замечательно}, {Юмор: 2: жаль }};
    (примерно так)

    ОтветитьУдалить
    Ответы
    1. Можно. Только соблюдайте знаки препинания:
      1. Текстовые данные заключите в кавычки,
      2. Внутренние ассоциативные массивы должны быть в фигурных скобках.
      {Сила: 5: замечательно}
      ->
      {Сила: {5: 'замечательно'}}

      Удалить
  8. Кстати, Яндекс Браузер поддерживает русский без настройки кодировки (или это только у меня?).

    ОтветитьУдалить
  9. Я вообще не понимаю дз. помогите пожалуйста. Я перепробовал все возможные варианты, не получается

    ОтветитьУдалить