Как добавить вложенность в объект js?

Рейтинг: 0Ответов: 1Опубликовано: 20.03.2023

Есть

    var abc = {
      a: "50",
      b: "51",
      c: () => {},
      d: () => {},
      e: () => {}
    };

Надо преобразовать в

    var abc2 = {
      a: "50",
      b: "51",
      functions: {
         c: () => {},
         d: () => {},
         e: () => {}
      }
    };

Ответы

▲ 1Принят

var abc = {
  a: "50",
  b: "51",
  c: () => {},
  d: () => {},
  e: () => {}
};
// Object.entries раскладывает объект на массивы ключ-значение
// reduce проходится по массиву, складываем всё в объект obj
abc = Object.entries(abc).reduce((obj, [key, val]) => {
  // если встречаем не функцию - записываем как есть
    if (typeof val !== 'function') {
    obj[key] = val
  } else { // если встречаем функцию - записываем в obj.functions
    // если obj.functions нет - создаём параметр = пустой объект
    // можно в инициализации прописать свойство ({functions: {}}), тогда
    // условие не нужно, но придется сортировать свойства, если это важно
    if (!obj.functions) obj.functions = {} 
    obj.functions[key] = val
  }
  return obj //передаём объект в следующую итерацию
}, {})

console.log(abc)