Posted in

JS: Объекты и методы

Теория

Объекты Javascript — это мощные структуры данных, которые позволяют организовывать связанные данные в одно целое. Объекты — это отличный способ структурировать и манипулировать данными. В повседневной жизни мы можем встречать объекты по-разному.

  • Электронная коммерция – В интернет-магазинах используются название, цена, наличие на складе, описание, категория и т. д.
  • Бронирование отелей – Отели используют объекты для представления бронирований
  • Автомобили – Каждый автомобиль может быть объектом, таким как марка, модель, цвет, объем двигателя, регистрационный номер и т. д.
  • Учащиеся – Каждый учащийся может быть объектом, таким как имя, возраст, класс, оценки и т. д.

В программах Javascript при необходимости можно создавать собственные настраиваемые объекты. Некоторые встроенные объекты, например:

  • Math — объект содержит математические функции и константы.
  • Date — объект позволяет работать с датами и временем.
  • Array — объект является встроенным объектом, который используется для создания и манипулирования массивами.
  • String — объект содержит методы, которые позволяют работать со словами.
  • Object  — объект является базовым объектом JavaScript, который используется в качестве основы для всех объектов.

Создание объекта

Синтаксис объекта состоит из пар ключ-значение, где ключ может быть любого типа данных. В этом примере создан объект с именем «auto»:

let auto = {
  mark: "Tesla",
  mudel: "Model Y",
  aasta: 2025,
  varv: "valge",
  lisavarustus: ["autopiloot", "elektrimootor", "360 kraadi kaamerad"]
};

Для выдачи необходимо следующее сообщение:

Доступ к свойствам каждого объекта можно получить с помощью точечной синтаксиса. Например:

console.log(auto.mark); // Output: "Tesla"

Методы объекта и использование this

Объекты в Javascript могут содержать не только свойства, но и методы. Методы — это функции объекта, которые могут манипулировать свойствами объекта. this используется внутри методов, чтобы указать объект, в котором вызван метод. Создадим для объекта «auto» метод, который отображает полное имя автомобиля.

let auto = {
  //omadused
  mark: "Tesla",
  mudel: "Model Y",
  aasta: 2025,
  varv: "valge",
  lisavarustus: ["autopiloot", "elektrimootor", "360 kraadi kaamerad"],

  //meetodid
  taisnimi: function() {
    return this.mark + " " + this.mudel;
  }
};

console.log(auto.taisnimi());

Затем отображается функция taisnimi:

Сокращение метода

Новый Javascript ES6 теперь позволяет записывать метод более кратко.

//meetodid
taisnimi() {
  return this.mark + " " + this.mudel;
}

Если свойства находятся в массиве, используйте цикл for или forEach.

let auto = {
  //omadused
  mark: "Tesla",
  mudel: "Model Y",
  aasta: 2025,
  varv: "valge",
  lisavarustus: ["autopiloot", "elektrimootor", "360 kraadi kaamerad"],

  //meetodid
  taisnimi() {
    return this.mark + " " + this.mudel;
  },

  kuvaOmadused() {
    this.lisavarustus.forEach(omadus => console.log(omadus));  
  }
};

auto.kuvaOmadused();

Показаны все характеристики:

Массивы объектов

Массив объектов в JavaScript — это структура данных, состоящая из нескольких объектов, упорядоченных по индексу. Каждый объект представляет собой ключ, где ключ является уникальным, а значением являются данные пары ключ-значение. Массив объектов может содержать различные типы данных.

Создание и отображение массива объектов

Создание массива объектов относительно просто. Начнем с записи данных об автомобилях. Каждый автомобиль представлен объектом, содержащим информацию о марке, модели и годе выпуска автомобиля.

let autod = [
  { mark: 'Tesla', mudel: 'Model Y', aasta: 2025 },
  { mark: 'Audi', mudel: 'Caret', aasta: 2023 },
  { mark: 'BMW', mudel: 'I9', aasta: 2022 }
];

console.log(autod);

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

console.log(autod[0]);

И в этом объекте я получаю элементы с помощью «точечного синтаксиса», как описано выше.

console.log(autod[0].mark);

Чтобы увидеть все модели, мы снова используем цикл forEach.

let autod = [
  { mark: 'Tesla', mudel: 'Model Y', aasta: 2025 },
  { mark: 'Audi', mudel: 'Caret', aasta: 2023 },
  { mark: 'BMW', mudel: 'I9', aasta: 2022 }
];


autod.forEach((auto) => {
  console.log(`
    Mark: ${auto.mark},
    Mudel: ${auto.mudel},
    Aasta: ${auto.aasta}
    `);
});

Методы массива объекта

Методы массивов JavaScript можно использовать как для обычных массивов, так и для массивов объектов. Например, push(), pop(), shift(), unshift(), splice(), slice(), forEach(), map(), filter(), reduce(), sort(), и т. д. Все они доступны независимо от того, содержит ли массив простые типы данных.

Тип данных, содержащихся в массиве, не влияет на методы массивов. Например, добавление новых объектов в массив объектов с помощью push и unshift.

let autod = [
  { mark: 'Tesla', mudel: 'Model Y', aasta: 2025 },
  { mark: 'Audi', mudel: 'Caret', aasta: 2023 },
  { mark: 'BMW', mudel: 'I9', aasta: 2022 }
];

//Lisab uue objekti massiivi lõppu
autod.push({ mark: 'BMW', mudel: '350i', aasta: 2018 });
autod.unshift({ mark: 'Ford', mudel: 'Focus 2', aasta: 2025 });

Метод splice одновременно удаляет и добавляет.

massiiv.splice(
  {start indeks},
  {mitu eemaldada},
  {mida lisada}
);

//Eemaldab esimese objekti
autod.splice(0,1);
//Lisab objekti alates teisest indeksist, ei kustutata midagi
autod.splice(1,0,{ mark: 'Audi', mudel: 'A5', aasta: 2020 });

Поиск по массиву

Для поиска в массиве объектов мы используем метод find, который для запуска требует функцию.

//Otsimine
let otsing = autod.find(auto=>auto.aasta > 2015);
console.log(otsing);

Данный метод находит первое совпадение и возвращает его. Если ответ не найден, то возвращается undefined. Для установки нескольких условий используйте && знаки

let otsing = autod.find(auto=>auto.aasta > 2018 && auto.mark === "Audi");
console.log(otsing);

Фильтрация массива

Поскольку find находит только один результат, для получения нескольких ответов используйте метод filter.

Например, у нас есть числа, и мы хотим получить из них парные числа

let arvud = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];

const filtreeritud = arvud.filter(arv => arv % 2 === 0);
console.log(filtreeritud);

В случае с автомобилями мы можем обратиться, например, к auto.aasta и отфильтровать те, которые новее 2022 года.

//Filtreerimine
let filter = autod.filter(auto=>auto.aasta > 2022);
console.log(filter);

Сортировка массива

В качестве последнего метода рассмотрим сортировку sort. Простая сортировка массива объектов не работает правильно. Поэтому мы должны использовать функцию сравнения.

autod.sort((a, b) => a.aasta - b.aasta);
console.log(autod);

Здесь есть функция сравнения (a, b) => a - b, которая сообщает sort(), что числа следует сортировать по их фактическим числовым значениям, а не по строковым значениям. Функция a - b возвращает отрицательное значение, если a меньше b, положительное значение, если a больше, чем b, и 0, если a и b равны — именно то, что sort() нуждается для правильного упорядочения своих элементов.

Задание

Объект «raamat»

1. Создайте объект "raamat", который имеет как минимум три свойства: pealkiri, autor, aasta.

let raamat = { 
  pealkiri: 'Superaine arst', 
  autor: 'Aleksandr Kuprin', 
  aasta: 1898
};

2. Добавьте метод, который отображает описание первой книги.

console.log(raamat.pealkiri);

Ответ:

3. Добавьте метод, который изменяет год выпуска и выводит результаты в консоль.

"Superaine arst" измененен год на 2024

let raamat = { 
  pealkiri: 'Superaine arst', 
  autor: 'Aleksandr Kuprin', 
  aasta: 1898,

  //meetodid
  muudaaasta() {
    raamat.aasta = 2024
    return console.log(raamat.aasta);
  }
};

Библиотека

1. Создайте объект "raamatukogu", свойством которого является "raamatud" (массив книг).

let raamatukogu = [
  { pealkiri: 'Superaine arst', autor: 'Aleksandr Kuprin', aasta: 1898},
  { pealkiri: 'Sipsik', autor: 'Eno Raud', aasta: 1962},
  { pealkiri: '451 kraadi farhengeit', autor: 'Ray Breadberry', aasta: 1963}
];

2. Добавьте метод, который красиво отображает все книги в консоли.

raamatukogu.forEach((raamatud) => {
  console.log(`
    Pealkiri: ${raamatud.pealkiri},
    Autor: ${raamatud.autor},
    Aasta: ${raamatud.aasta}
    `);
});

3. Добавьте метод, который добавляет новую книгу.

raamatukogu.push({ pealkiri: 'Lugu', autor: 'Mina', aasta: 2025 });

4. Добавьте метод, который отображает общее количество книг в библиотеке.

console.log(raamatukogu.length)

5. Добавьте метод, который подсчитывает, сколько книг было издано после 2000 года.

let filter = raamatukogu.filter(raamatukogu=>raamatukogu.aasta > 2000);
console.log(filter.length);

6. Составьте свой метод и опишите, что он означает

Показать все книги, но в заголовке также указан автор!

raamatukogu.forEach((raamatud) => {
  console.log(`
    Pealkiri: ${raamatud.pealkiri + " - " + raamatud.autor},
    Aasta: ${raamatud.aasta}
    `);
});

This post is also available in et.