Задать вопрос
Buryak20
@Buryak20
Изучаю js

Как преобразовать объект со вложенными объектами в простой объект?

У меня есть объект obj = { a: 100, b: 152, c: { y: 133, x: { m: 20} } } мне нужно его преобразовать в объект без вложенности, то есть obj = { a: 100, b: 152, y: 133, m: 20} подскажите как можно это сделать?
  • Вопрос задан
  • 333 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Правильно понимаю, что массивы обрабатывать не надо? Т.е.,

const isObject = v =>
  v instanceof Object && !Array.isArray(v);

Рекурсия есть:

const flatObj = obj => Object
  .entries(isObject(obj) ? obj : {})
  .reduce((acc, [ k, v ]) => (
    isObject(v)
      ? Object.assign(acc, flatObj(v))
      : acc[k] = v,
    acc
  ), {});

Рекурсии нет:

function flatObj(obj) {
  const result = {};

  for (const stack = isObject(obj) ? [ [ , obj ] ] : []; stack.length;) {
    const [ k, v ] = stack.pop();
    if (isObject(v)) {
      stack.push(...Object.entries(v).reverse());
    } else {
      result[k] = v;
    }
  }

  return result;
}
Ответ написан
@dGololobov
начинающий
const obj = { a: 100, b: 152, c: { y: 133, x: { m: 20} } }
const flatObject = (current) => {
    return Object.keys(current).reduce((acc, cur) => {
      if (typeof(current[cur]) !== 'object') {
         	acc[cur] = current[cur]
      } else {
      	      acc = {...acc, ...flatObject(current[cur]) }
      }
     	return acc
}, {})
}

console.log(flatObject(obj))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sinneren
@sinneren
[].concat.apply([], obj);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы