Функции работы с ключами Проверить, есть ли у объекта ключ const hasKey = (obj, keys) => { return ( keys.length > 0 && keys.every(key => { if (typeof obj !== 'object' || !obj.hasOwnProperty(key)) return false; obj = obj[key]; return true; }) ); };JavaScriptCopy let obj = { a: 1, b: { c: 4 }, 'b.d': 5 }; hasKey(obj, ['a']); // true hasKey(obj, ['b']); // true hasKey(obj, ['b', 'c']); // true hasKey(obj, ['b.d']); // true hasKey(obj, ['d']); // false hasKey(obj, ['c']); // false hasKey(obj, ['b', 'f']); // falseJavaScriptCopy Найти, что ключи объекта действительны const assertValidKeys = (obj, keys) => Object.keys(obj).every(key => keys.includes(key));JavaScriptCopy assertValidKeys({ id: 10, name: 'apple' }, ['id', 'name']); // true assertValidKeys({ id: 10, name: 'apple' }, ['id', 'type']); // falseJavaScriptCopy Символизировать ключи объекта const symbolizeKeys = obj => Object.keys(obj).reduce( (acc, key) => ({ …acc, [Symbol(key)]: obj[key] }), {} );JavaScriptCopy symbolizeKeys({ id: 10, name: 'apple' }); // { [Symbol(id)]: 10, [Symbol(name)]: 'apple' }JavaScriptCopy Найти совпадающие ключи const findKeys = (obj, val) => Object.keys(obj).filter(key => obj[key] === val);JavaScriptCopy const ages = { Leo: 20, Zoey: 21, Jane: 20, }; findKeys(ages, 20); // [ 'Leo', 'Jane' ]JavaScriptCopy Общие ключи const commonKeys = (obj1, obj2) => Object.keys(obj1).filter(key => obj2.hasOwnProperty(key));JavaScriptCopy commonKeys({ a: 1, b: 2 }, { a: 2, c: 1 }); // ['a']JavaScriptCopy Выберите ключи объекта const pick = (obj, arr) => arr.reduce((acc, curr) => (curr in obj && (acc[curr] = obj[curr]), acc), {});JavaScriptCopy pick({ a: 1, b: '2', c: 3 }, ['a', 'c']); // { 'a': 1, 'c': 3 }JavaScriptCopy Найти последний совпадающий ключ const findLastKey = (obj, fn) => Object.keys(obj) .reverse() .find(key => fn(obj[key], key, obj));JavaScriptCopy findLastKey( { barney: { age: 36, active: true }, fred: { age: 40, active: false }, pebbles: { age: 1, active: true } }, x => x['active'] ); // 'pebbles'JavaScriptCopy Найти первый соответствующий ключ const findKey = (obj, fn) => Object.keys(obj).find(key => fn(obj[key], key, obj));JavaScriptCopy findKey( { barney: { age: 36, active: true }, fred: { age: 40, active: false }, pebbles: { age: 1, active: true } }, x => x['active'] ); // 'barney'JavaScriptCopy Как добавить пару ключ-значение в объект JavaScript Обозначение через точку const obj = { a: 1 }; obj.b = 2; obj.c = 3; // obj = { a: 1, b: 2, c: 3 }JavaScriptCopy Обозначение квадратных скобок const obj = { a: 1 }; const bKey = 'b'; obj[bKey] = 2; obj['c'] = 3; // obj = { a: 1, b: 2, c: 3 }JavaScriptCopy Объект.назначить() const obj = { a: 1 }; Object.assign(obj, { b: 2 }, { c: 3 }); // obj = { a: 1, b: 2, c: 3 }JavaScriptCopy Объект.defineProperty() const obj = { a: 1 }; Object.defineProperty(obj, 'b', { value: 2, enumerable: true, configurable: true, writable: true }); Object.defineProperty(obj, 'c', { value: 3, enumerable: true, configurable: true, writable: true }); // obj = { a: 1, b: 2, c: 3 }JavaScriptCopy Оператор распространения объекта const obj = { a: 1 }; const newObj = { …obj, b: 2, c: 3 }; // obj = { a: 1 } // newObj = { a: 1, b: 2, c: 3 }JavaScriptCopy Массивы и объекты JavaScript JavaScript