Получить путь до свойства объекта
Всем привет! Что-то зашел в тупик, нужны свежие идеи) Есть объект с вложенными структурами и у конечных свойств нужно получить путь до них.
const obj = {
foo: {
bar: 5,
},
zoo: {
animal: {
lion: 'sad'
}
}
gain: true,
list: [{
a: 5,
}]
}
На выходе надо получить объект вида:
const obj = {
foo: {
bar: 'foo.bar',
},
zoo: {
animal: {
lion: 'zoo.animal.lion'
}
}
gain: 'gain',
list: 'list[0].a'
}
Моя попытка( в массив еще не заходил и варианта, что в массиве не объект нет, самое важное правильно обработать сильно вложенные объекты), нужно для правильного генерирования пропов для form-item:
const getFormItemProps = (formModel, mainKey) => {
const formItemProps = {};
Object.keys(formModel).forEach((key) => {
if (typeof formModel[key] === 'object') {
formItemProps[key] = getFormItemProps(formModel[key], key);
} else {
formItemProps[key] = `${mainKey ? `${mainKey}.` : ''}${key}`;
}
});
return formItemProps;
};
Ответы (1 шт):
Автор решения: ΝNL993
→ Ссылка
Если я правильно понял вам нужно что-то такое:
const obj = {
foo: {
bar: 5,
},
zoo: {
animal: {
lion: 'sad'
}
},
gain: true,
list: [{
a: 5,
}, {
b: 10,
}, {
c: 20
}]
}
function genPaths(o, p) {
p = (p ?? '')
Object.keys(o).forEach(e => {
if(Array.isArray(o[e])) {
let arrPath = ''
for (let i = 0; i < o[e].length; i++) {
arrPath += `${e}[${i}].${Object.keys(o[e][i])}; `
}
o[e] = arrPath.slice(0, -1)
} else if(typeof o[e] === 'object') {
o[e] = genPaths(o[e], p + e + '.')
} else {
o[e] = p + e
}
})
return o
}
console.log(genPaths(obj))
Также добавил в массив ещё парочку объектов чтобы было видно, что обрабатываются все элементы массива. Если в объекте (который в массиве) будет более одного ключа, тогда ключи будет отображаться через запятую.