Руководство о том, как проверить, имеет ли объект определенный набор ключей в массиве в JavaScript.

Иногда в JavaScript у нас есть объект, которому нужно соответствовать определенному набору ключей. Это возможно за счет принудительного ввода типов в TypeScript, но если мы хотим делать определенные вещи, если ключи не существуют, нам нужно использовать другой подход.

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

let obj = {
    firstName: Jack,
    lastName: Doe,
    age: 123
}
console.log(`${obj.firstName} ${obj.lastName} is ${obj.age}`);

Если мы получаем наши данные в obj из массива, мы можем быть уверены, что эти свойства будут предоставлены, но если API когда-либо изменится, мы можем столкнуться с проблемами. Разработчики API могут решить удалить age или любое другое свойство или, возможно, переименовать firstName в first_name. В лучшем сценарии это приведет к тому, что ключи станут неопределенными. В худшем случае это может привести к ошибке и сбою нашего приложения.

Чтобы избежать этого, мы можем проверить, есть ли у объекта требуемые ключи.

Как проверить, содержит ли объект все ключи в массиве

Решение этой проблемы использует every(). every() — это метод массива, который проверяет каждый элемент в массиве и выполняет для них логическую проверку. Если все возвращают true, то метод every() возвращает true.

Чтобы проверить, содержит ли объект все ключи в массиве, мы просто используем every() для массива всех ключей, которые мы хотим проверить. Таким образом, мы можем логически проверить существование каждого элемента, а затем сделать что-то еще, если он окажется ложным, что предотвратит появление каких-либо ошибок:

let requiredKeys = [ 'firstName', 'lastName', 'age' ]
let obj = {
    firstName: Jack,
    lastName: Doe,
    age: 123
}
let checkAllKeys = requiredKeys.every((i) => obj.hasOwnProperty(i));
if(checkAllKeys) {
    console.log(`${obj.firstName} ${obj.lastName} is ${obj.age}`);
}
else {
    console.log('The API does not have all the keys required. Please check API and configuration')
}

Здесь мы создаем массив наших необходимых ключейfirstName, lastName и age. Затем мы используем every() для просмотра каждого элемента в этом массиве. В every() мы запускаем функцию — здесь i — это текущий элемент, который проходит через цикл. Если obj имеет свойство i, то every() вернет true для этого конкретного элемента.

Если каждый элемент возвращает true, то every возвращает true в целом. В противном случае он вернет false. Таким образом, если checkAllKeys истинно, мы можем быть уверены, что у него есть все необходимые нам ключи. В противном случае мы можем сделать что-то еще — например, console.log об ошибке.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.