Skip to main content

Object

Использование объекта (Object) в JavaScript в качестве хеш-таблицы — это распространенный подход, особенно до введения Map в ES6.
Давайте разберем все, что нужно знать о Object при использовании его как хеш-таблицы, а также обсудим минусы этого подхода.

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

let obj = {}; // Литеральный способ
let obj = new Object(); // С помощью конструктора

Добавление и удаление объекта

obj["key"] = "value"; // Добавление или обновление значения
delete obj["key"]; // Удаление ключа и значения

Доступ к элементам

let value = obj["key"]; // Получение значения

Проверка наличия ключа

if ("key" in obj) {
console.log("Key exists");
}

Итерация по ключам

for (let key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key, obj[key]);
}
}

Преобразования

Из объекта в массив

let obj = {
key1: "value1",
key2: "value2",
key3: "value3",
};

// Получение массива ключей
let keys = Object.keys(obj);
console.log(keys); // Output: ["key1", "key2", "key3"]

// Получение массива значений
let values = Object.values(obj);
console.log(values); // Output: ["value1", "value2", "value3"]

// Получение массива пар ключ-значение
let entries = Object.entries(obj);
console.log(entries); // Output: [["key1", "value1"], ["key2", "value2"], ["key3", "value3"]]

Из массива в объект

let entries = [
["key1", "value1"],
["key2", "value2"],
["key3", "value3"],
];

// Использование reduce
let obj = entries.reduce((acc, [key, value]) => {
acc[key] = value;
return acc;
}, {});
console.log(obj); // Output: { key1: "value1", key2: "value2", key3: "value3" }

// Использование Object.fromEntries
let obj2 = Object.fromEntries(entries);
console.log(obj2); // Output: { key1: "value1", key2: "value2", key3: "value3" }

Минусы

  • В Object ключами могут быть только строки или символы. Это ограничение устраняется в Map, где ключи могут быть любого типа.
  • Объекты в JavaScript наследуют свойства через прототипное наследование. Это может вызвать конфликты с пользовательскими ключами.
  • В Object порядок ключей не гарантируется. Это может быть проблемой, если порядок важен.
  • Использование методов, таких как hasOwnProperty, чтобы избежать проблем с наследуемыми свойствами.