- Работа с массивами объектов в JavaScript
- Вывод массива с объектами
- Сортировка массива с объектами
- Запись свойств (полей) объекта
- Вывод массива объектов с использованием цикла for . in
- Массив внутри объекта javascript
- Официальные языки Швейцарии
- Города Швейцарии
- Массивы и объекты в JavaScript как книги и газеты
- Массивы: порядок данных очень важен
- Объекты: заголовок имеет значение
- Объединяем объекты и массивы
Работа с массивами объектов в JavaScript
Если вы работали с массивами в JavaScript, то наверняка использовали ряд методов, которые позволяют перебрать все элементы массива и вывести их на экран или подсчитать сумму элементов-чисел. Однако для работы с реальными данными, которые передаются в сети в JSON-файлах или загружаются из базы данных вам, скорей всего, придется работать с массивами объектов.
Вывод массива с объектами
Разница между обычным массивом и массивом объектов не столь уж велика. Просто добавляется, как правило, точечный синтаксис при обращении к свойствам каждого объекта внутри массива. Например, мы можем сформировать нумерованный список при выводе информации о каждом объекте массива:
Нумерация списка начинается с нуля, для того чтобы сразу был понятен реальный индекс элемента в массиве. Имя животного выводится, как $ , его вид — как $ , а его возраст — как $ . Имя выделено другим цветом.
Сортировка массива с объектами
Еще один момент связан с сортировкой массивов, в которых вместо чисел или строк находятся объекты. У каждого такого объекта может быть одно или несколько строковых свойств и одно или несколько числовых. Для сортировки по каждому из них стоит создавать свою функцию, т.к. передаваемые параметры могут быть разными. Например, мы можем написать такую функцию сортировки массива животных по свойству age :
Результат в консоли браузера нам выдаст список, в котором все животные разместились по возрастанию количества прожитых лет. Учтите, что метод array.sort() преобразует массив. Теперь элементы имеют другие индексы, чем при объявлении массива.
Рассмотрим еще сортировку по именам. Тут принцип точно такой же, но еще мы добавим функцию toLowerCase() , чтобы имена в верхнем и нижнем регистре отсортировывались по алфавитному порядку:
Результат выполнения сортировки в консоли браузера:
Запись свойств (полей) объекта
Объекты в массивах могут содержать самые разные поля и значения, которые зависят от того, что вам необходимо реализовать в скрипте. Причем названия полей (свойств) объекта могут быть в виде одного или нескольких слов. В последнем случае в обязательном порядке нужно помещать название поля в кавычки и обращаться к такому полу нужно, как к элементу ассоциативного массива. Например, мы имеем такой объект:
Поле ‘model phone’ выдаст ошибку, если не взять его в кавычки. Если же оно будет в кавычках, то все будет в порядке.
На данный момент вы даже можете сформировать объект со свойствами (полями), которые имеют кириллические символы. Например, вывод информации о модели телефона можно представить в таком виде:
Такая запись выглядит довольно непривычно, но обрабатывается интерпретатором корректно. В кавычки помещены те свойства объекта, которые содержат в своем названии 2 слова.
Результат выполнения скрипта:
Вывод массива объектов с использованием цикла for . in
Предположим, что нам нужно вывести ряд html-элементов, например, абзацев, с различным css-форматированием, причем набор правил и текст мы получаем в виде массива объектов. Чаще всего каждый объект в таком массиве имеет набор полей, которые идут в строго определенном порядке, но, предположим, наш массив формировал неопытный студент вручную, поэтому в объектах поля следуют по-разному.
Если посмотреть на названия свойств (полей), то можно заметить, что только свойство text не относится к css-свойствам. Все же остальные и по названию свойства, и по значению относятся к правилам css. Поэтому проще всего собрать css-свойства в одну строку, которая в приведенном ниже скрипте является переменной styleStr , а затем добавить ее в качестве значения атрибута style для абзаца. С этим нам поможет справится замечательный цикл for. in. Есть только одно но — нам нельзя в css-свойства записать свойство text объекта, поэтому напишем для этой ситуации проверку с помощью if и пропустим добавление текста к styleStr с помощью оператора циклов continue .
Массив внутри объекта javascript
Одни объекты могут содержать в качестве свойств другие объекты. Например, есть объект страны, у которой можно выделить ряд свойств. Одно из этих свойств может представлять столицу. Но у столицы мы также можем выделить свои свойства, например, название, численность населения, год основания:
var country = < name: "Германия", language: "немецкий", capital:< name: "Берлин", population: 3375000, year: 1237 >>; console.log("Столица: " + country.capital.name); // Берлин console.log("Население: " + country["capital"]["population"]); // 3375000 console.log("Год основания: " + country.capital["year"]); // 1237
Для доступа к свойствам таких вложенных объектов мы можем использовать стандартную нотацию точки:
Либо обращаться к ним как к элементам массивов:
Также допустим смешанный вид обращения:
В качестве свойств также могут использоваться массивы, в том числе массивы других объектов:
var country = < name: "Швейцария", languages: ["немецкий", "французский", "итальянский"], capital:< name: "Берн", population: 126598 >, cities: [ < name: "Цюрих", population: 378884>, < name: "Женева", population: 188634>, < name: "Базель", population: 164937>] >; // вывод всех элементов из country.languages document.write("Официальные языки Швейцарии
"); for(var i=0; i < country.languages.length; i++) document.write(country.languages[i] + "
"); // вывод всех элементов из country.cities document.write("Города Швейцарии
"); for(var i=0; i < country.cities.length; i++) document.write(country.cities[i].name + "
");
В объекте country имеется свойство languages, содержащее массив строк, а также свойство cities, хранящее массив однотипных объектов.
С этими массивами мы можем работать также, как и с любыми другими, например, перебрать с помощью цикла for.
При переборе массива объектов каждый текущий элемент будет представлять отдельный объект, поэтому мы можем обратиться к его свойствам и методам:
В итоге браузер выведет содержимое этих массивов:
Массивы и объекты в JavaScript как книги и газеты
Если вы читали книги и газеты, то легко поймёте разницу между объектами и массивами в JavaScript.
В начале изучения JavaScript можно легко запутаться в способах хранения данных. С одной стороны, массивы могут быть знакомы вам благодаря циклу for . Но, по мере того, как вы будете заполнять массив данными, код может стать всё менее поддерживаемым.
Выбор между объектом и массивом станет проще, если представлять себе зачем нужна та или иная структура. Массивы подобны книгам, в которых содержится та или иная информация, а объекты похожи на газету.
Массивы: порядок данных очень важен
Взглянем на нашу небольшую книгу, если бы она была массивом:
var book = [`foreword`, `boyWhoLived`, `vanishingGlass`, `lettersFromNoOne`, `afterword`];
Кстати, обратите внимание — это первые три главы книги «Гарри Поттер и философский камень». И вот как можно визуализировать их:
Использовать массивы нужно тогда, когда последовательность информации имеет большое значение.
Надеюсь, что никто не глядит на оглавление книги и не думает: «Хм, эта глава выглядит интересной, пожалуй начну с неё». Порядок глав в книге указывает, как её нужно читать.
Когда нужно перебрать массив, то используется номер для каждого элемента массива. Массивы — это структуры данных, где нумерация начинается с нуля, поэтому мы начинаем в них отсчёт с 0, а не 1.
Так что, если вы хотите получить доступ к первому элементу массива, то пишите так:
Если нужна третья глава, то напишите так:
Вы читаете книгу, основываясь на порядке глав в книге, а не по названию этих глав.
Объекты: заголовок имеет значение
Посмотрите как бы выглядела газета в виде объекта:
А вот так можно визуализировать её:
Объекты — лучший выбор если вы хотите структурировать информацию по названию данных.
Читая газету, мы не обязаны читать её «от корки до корки». Можно начать чтение с любого интересного для вас раздела. Неважно, где именно этот раздел находится в газете, контекст сохраняется. Это и отличает газету от книги, где важна строгая последовательность чтения глав.
Объекты хранят информацию в виде пары ключ-значение. Вот как это выглядит:
Если хотите начать читать газету с новостей бизнеса, то использовать следует такой ключ:
Это вернёт нам значение: GE Stock Dips Again Поэтому когда легче получить доступ к данным на основании их имён (ключа), то вам необходимо хранить эти данные в виде объекта.
Объединяем объекты и массивы
В примерах выше в наших массивах и объектах мы хранили только строки. Но можно хранить и другие структуры данных, такие как числа или булевы значения, а также:
- Массивы внутри объектов.
- Объекты внутри массивов.
- Массивы внутри массивов.
- Объекты внутри объектов.
Это начинает становиться сложным. Но вам всегда нужна будет комбинация из двух типов для лучшей масштабируемости данных. Вы же хотите разобраться в коде спустя время, когда нужно будет что-то в нём исправить?
Давайте снова возьмём книгу, как пример. Что если мы хотим также хранить и количество страниц в каждой главе? В таком случае стоит заполнить наш массив объектами:
var book = [ [`foreword`, 14], [`boywholived`, 18] ]
Таким образом, мы сохранили порядок глав и в то же время разные свойства для каждой главы. Например, если захотите узнать сколько страниц во второй главе, то можете написать:
В результате мы увидим, что в книге будет 18 страниц.
Теперь давайте представим, что нам нужен топ-писателей для каждой колонки новостей в газете. Можно быстро сделать это с помощью массива внутри объекта:
Массив отлично подходит для хранения информации о рейтинге писателей, поскольку в массиве порядок имеет значение. Вы знаете, что старые авторы оцениваются выше, чем новые и это характерно для каждого массива. Писатель с номером 0 будет топ-писателем.
Можно оптимизировать этот объект, просто создав объект внутри нашего объекта newspaper . Например, объект sports с заголовком и списком писателей. Но теперь я хочу, чтобы вы сами попробовали.
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.