Я сейчас нахожусь в ситуации, когда в объекте есть определенные свойства, которые я хотел бы изменить на случай змеи. На данный момент я могу изменить имена свойств в этом объекте, если они не находятся во вложенном объекте или в объекте в массиве. Это моя функция вместе с объектом, который я передаю:
/* an object to refer to where the values are what I want to change the name to */
const camelToSnake = {
accountId: 'id',
taxId: 'tax_id',
individuals: 'customers',
firstName: 'first_name',
lastName: 'last_name',
};
/* example object I am passing in to the function */
const obj = {
accountId: "12345",
individuals: [
{name: {firstName: "John", lastName: "Doe"}},
{name: {firstName: "Bob", lastName: "Smith"}},
],
taxId: "67890",
}
const restructureToSnakeCase = obj => {
const newObj = {};
Object.keys(obj).forEach(key => {
if(typeof obj[key] === 'object'){
restructureToSnakeCase(obj[key])
}
if(Array.isArray(obj[key])){
obj[key].map(el => {
restructureToSnakeCase(obj[key])
})
}
newObj[camelToSnake[key] || key] = obj[key]
});
return newObj;
};
С моей пока функцией она может l oop поверх любых объектов первого уровня и изменять имена свойств, но это не так. с любым вложенным значением.
С объектом, который я передаю выше, это результат:
{
id: "12345",
customers: [
{name: {firstName: "John", lastName: "Doe"}},
{name: {firstName: "Bob", lastName: "Smith"}},
],
tax_id: "67890"
}
В этой ситуации "firstName" и "lastName" должны быть "first_name" и "фамилия".
Я думал с рекурсией, которую я имел выше, что она сможет go в каждый вложенный объект и соответственно изменять имена свойств, но, очевидно, это не работает. Буду очень признателен за любые указатели.