Как можно более эффективно проверить объект на наличие только разрешенных ключей из предопределенного списка? Например, у нас есть стандартный объект с определенными ключами ["v", "c", "g"], и нам необходимо убедиться, что объект содержит только один из этих разрешенных ключей. Метод сортировки и ручная проверка может быть неэффективным, есть ли другие способы решения этой задачи?
Для определения наличия ключа в объекте, о котором заранее неизвестно, можно воспользоваться методом hasOwnProperty() или оператором in. Пример для hasOwnProperty(): ```javascript const obj = { key1: 'value1', key2: 'value2' }; const keyToCheck = 'key1'; if(obj.hasOwnProperty(keyToCheck)) { console.log(`Ключ ${keyToCheck} существует в объекте`); } else { console.log(`Ключ ${keyToCheck} не существует в объекте`); } ``` Пример для оператора in: ```javascript const obj = { key1: 'value1', key2: 'value2' }; const keyToCheck = 'key1'; if(keyToCheck in obj) { console.log(`Ключ ${keyToCheck} существует в объекте`); } else { console.log(`Ключ ${keyToCheck} не существует в объекте`); } ``` Для эффективной проверки объекта на наличие только разрешенных ключей из предопределенного списка можно воспользоваться методом Object.keys() для получения массива ключей объекта, и сравнить его с предопределенным списком разрешенных ключей. Пример: ```javascript const obj = { v: 'value1', x: 'value2' }; const allowedKeys = ['v', 'c', 'g']; const keys = Object.keys(obj); const hasOnlyAllowedKeys = keys.every(key => allowedKeys.includes(key)); if(hasOnlyAllowedKeys) { console.log('Объект содержит только разрешенные ключи'); } else { console.log('Объект содержит недопустимые ключи'); } ``` Этот подход позволяет эффективно проверить объект на наличие только разрешенных ключей из предопределенного списка без необходимости использования сортировки или ручной проверки.
function isPermittedObject(obj) { if (!obj) return false; const permitted = new Set(["v", "c", "g"]); let max = 1; for (const key in obj) if (!permitted.has(key) || !max--) return false; return true; } console.log(!isPermittedObject({ v: 1, c: 3, g: 5 })) console.log(!isPermittedObject({ v: 1 }))