> Как написать метод объекта в JavaScript для получения значений по ключам в виде строки (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: GoInvest

Стек: JavaScript

> Пример ответа

Короткий ответ

Метод объекта для получения значений по ключам в виде строки можно реализовать через Object.values(obj).join(separator). Для кастомного форматирования используйте Object.entries(obj).map(([key, value]) => ${key}: ${value}).join(', '). В современных проектах также применяют Object.fromEntries и деструктуризацию для гибкой обработки.

Подробное объяснение

В JavaScript для преобразования значений объекта в строку существует несколько подходов. Базовый - Object.values(obj).join(', '), который собирает все значения в одну строку через разделитель. Если нужно включить ключи, используйте Object.entries(obj).map(([key, value]) => ${key}=${value}).join('&') - это часто применяется для query string.

Для вложенных объектов требуется рекурсивная обработка. В production-коде избегайте мутации исходного объекта и учитывайте edge cases: null, undefined, функции, символы. Метод JSON.stringify не подходит, если нужен кастомный формат, так как он сериализует только enumerable properties.

На практике

В реальных проектах такой метод используют для логирования, формирования URL-параметров, отладки. Важно обрабатывать prototype pollution - проверяйте hasOwnProperty. Для больших объектов используйте for...in с фильтром, чтобы избежать лишних итераций. В современных фреймворках (React, Vue) часто применяют утилиты из lodash или собственные хелперы.

Пример кода

JAVASCRIPT
// Базовый вариант
const obj = { name: 'Alice', age: 30, city: 'NY' };
const valuesString = Object.values(obj).join(', '); // "Alice, 30, NY"
// С ключами
const entriesString = Object.entries(obj)
.map(([k, v]) => `${k}: ${v}`)
.join('; '); // "name: Alice; age: 30; city: NY"
// Рекурсивный для вложенных объектов
function flattenToString(obj, prefix = '') {
return Object.entries(obj).reduce((acc, [key, value]) => {
const fullKey = prefix ? `${prefix}.${key}` : key;
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
return acc + flattenToString(value, fullKey) + ', ';
}
return acc + `${fullKey}=${value}, `;
}, '').slice(0, -2);
}
// Безопасный вариант с hasOwnProperty
function safeValuesToString(obj) {
const result = [];
for (const key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
result.push(obj[key]);
}
}
return result.join(' | ');
}

Как отвечать на собеседовании

Начните с простого решения через Object.values, затем покажите эволюцию: Object.entries для пар ключ-значение, рекурсию для вложенности. Упомяните про hasOwnProperty для безопасности. Спросите интервьюера про требования: нужна ли поддержка символов, какие разделители, как обрабатывать null. Покажите понимание trade-off между читаемостью и производительностью.

Что проверяет интервьюер

  • Знание методов Object.values, Object.entries, Object.keys
  • Понимание enumerable vs non-enumerable properties
  • Умение обрабатывать вложенные структуры рекурсивно
  • Осведомленность о prototype pollution и безопасности
  • Способность выбрать правильный инструмент под задачу

Типичные ошибки

  • Использование for...in без проверки hasOwnProperty - приводит к включению унаследованных свойств
  • Игнорирование null и undefined в значениях - вызывает ошибки при конкатенации
  • Мутация исходного объекта через delete или перезапись
  • Применение JSON.stringify когда нужен кастомный формат
  • Забывание про разделители при работе с массивами внутри объекта

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью