Я столкнулся с вопросами, подобными этому, но они обычно касаются того, как удалить подчеркивание, тогда как у меня есть проблема удаления подчеркивания в для l oop. Когда консоль входит в мою функцию, она показывает, что поля, которые я хочу изменить, на самом деле меняются, но когда я возвращаю объект, он возвращает только тот объект, у которого все ключи имеют случай змеи. Я думаю, что это может быть проблемой, но после того, как я поигрался с различным размещением переменных, я продолжаю застрять. Ниже приведен пример исходного объекта, который я хотел бы изменить:
const originalObj = {
accountNumber: '12345',
company: [
{
address: {
line1: '123',
line2: 'Spring Street'
}
}
],
ownerInfo: [
{
firstName: 'John',
lastName: 'Doe'
enrollment: '2015-10-15'
}
],
tax: {
code: '12345'
}
}
Используя пакет npm change-case-object
Я могу успешно заменить все ключи с верблюжьим чемоданом на случай змеи. Тем не менее, я не хочу, чтобы какой-либо ключ, имеющий значение цифра c, содержал подчеркивание (как в случаях line1 и line2). С помощью этой функции
import changeCaseObject from 'change-case-object';
export function restructure(originalObj) {
const regex = /\d/g;
let newObj;
if(typeof originalObj === "object"){
newObj = changeCaseObject.snakeCase(originalObj);
for(const key in newObj){
if(typeof newObj[key] === "object" && newObj[key] !== null){
restructure(newObj[key])
//if the value is an object use recursion
} else {
if(regex.test(key)){
let newKey = key.replace(/_/g, '');
newObj.newKey = newObj.key;
delete newObj.key;
}
}
}
}
return newObj;
}
Когда я добавляю консольный журнал в случае, когда ключ соответствует регулярному выражению, он показывает, что «line_1» фактически меняется на «line1» вместе с «line_2». Однако, возвращая newObj
, он просто возвращает объект, в котором все значения теперь имеют регистр змеи (как показано ниже)
{
account_number: '12345',
company: [
{
address: {
line_1: '123',
line_2: 'Spring Street'
}
}
],
owner_info: [
{
first_name: 'John',
last_name: 'Doe'
enrollment: '2015-10-15'
}
],
tax: {
code: '12345'
}
}
Я чувствую, что есть что-то очень простое, что я выход за пределы, но определение newObj
вне оператора if else также не привел к успеху. Спасибо за ваше время.