Как получить ключ элемента в JavaScript
Что проверяют
Уточните ли вы, о каком ключе речь: свойство объекта, индекс в массиве, ключ в Map или key у элемента списка в React. Чаще всего имеют в виду объект, и тогда следом просят найти ключ по значению и объяснить порядок ключей.
Как отвечать
Начните с уточнения, потом покажите основные случаи:
- ключи объекта:
Object.keys(obj)даёт собственные перечисляемые строковые ключи. Символьные он пропускает, а все ключи сразу, включая неперечисляемые, отдаётReflect.ownKeys; - ключ по значению:
Object.keys(obj).find(k => obj[k] === value). Если совпадения нет, вернётсяundefined; for...in: обходит и унаследованные перечисляемые свойства, поэтому внутри нужна проверкаObject.hasOwn(obj, k);Map: ключом может быть любое значение, включая объект. Естьmap.keys(), а для поиска по значению[...map].find(([, v]) => v === value)?.[0];- индекс в массиве:
indexOfсравнивает строго и не находитNaN,findIndexпринимает функцию. Оба возвращают-1, если ничего нет; - React:
keyне передаётся в компонент,props.keyбудетundefined. Если значение нужно внутри, его передают отдельным пропом, напримерid.
Отдельно стоит назвать порядок ключей объекта: сначала целочисленные по возрастанию, потом строковые в порядке добавления. Объект с ключами b, 10, 2 вернёт их как 2, 10, b.
Если же имели в виду клавишу, это event.key для символа и event.code для физической клавиши, а keyCode устарел.
Где спотыкаются
Отвечают про getElementById и id элемента. Это другой вопрос, и интервьюер воспримет такой ответ как непонимание формулировки.
Обходят массив через for...in. Индексы приходят строками, и всё, что добавлено в прототип, тоже попадёт в обход.
В React ставят индекс массива в key у списка, который сортируется или фильтруется. Состояние полей ввода начинает переезжать между строками, потому что React сопоставляет элементы по ключу.