Как добавить вложенность в объект js?
Есть
var abc = {
a: "50",
b: "51",
c: () => {},
d: () => {},
e: () => {}
};
Надо преобразовать в
var abc2 = {
a: "50",
b: "51",
functions: {
c: () => {},
d: () => {},
e: () => {}
}
};
Ответы (1 шт):
Автор решения: InDevX
→ Ссылка
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)