目前的场景是来自Nodejs后端的数据使用snake_case格式,但前端使用camelCase。我使用snakeize和camelize转换大小写,但有一个折衷方案。
使用camelize的ObjectId _id被转换为Id,而我期望的是id。
_id
Id
id
必须将_id转换为id
aydmsdu91#
我认为问题是你使用的软件包删除了他找到的每一个下划线,并将下划线后面的字母转换为大写字母。您只需要检查第一个字母是否是下划线并删除它:
const obj = { "_id" : 12345678, "name" : "John Doe" }; for (let key in obj){ if (key[0] === "_"){ const newKey = key.slice(1); obj[newKey] = obj[key]; delete obj[key]; } } console.log(obj)
**编辑:**递归:
const obj = { "_id" : 12345678, "name" : "John Doe", "inner_obj" : { "_id" : 12345678 } }; function removeUnderscore(obj){ for (let key in obj){ let newKey = key; if (key[0] === "_"){ newKey = key.slice(1); obj[newKey] = obj[key]; delete obj[key]; } if (typeof obj[newKey] === "object" && !Array.isArray(obj[newKey])) removeUnderscore(obj[newKey]) } } removeUnderscore(obj); console.log(obj);
x8diyxa72#
从上面的陈述中很难辨别出您的体系结构或数据流。但是我想说,你目前的方法,重新格式化整个数据结构,要么是蛇或 Camel 是不必要的,除非这个数据结构是通过函数传递的,你不能控制它如何撤退。重新格式化数据结构需要递归循环。随着数据结构的大小和嵌套的增长,您的时间和复杂性将增加。我建议您创建一个 Package lo-dash.get和change-case的函数。示例:getData(dataStructure, path, case, defaultValue);预先格式化整个数据结构可能成本高昂,并会导致性能问题
getData(dataStructure, path, case, defaultValue);
2条答案
按热度按时间aydmsdu91#
我认为问题是你使用的软件包删除了他找到的每一个下划线,并将下划线后面的字母转换为大写字母。
您只需要检查第一个字母是否是下划线并删除它:
**编辑:**递归:
x8diyxa72#
从上面的陈述中很难辨别出您的体系结构或数据流。
但是我想说,你目前的方法,重新格式化整个数据结构,要么是蛇或 Camel 是不必要的,除非这个数据结构是通过函数传递的,你不能控制它如何撤退。
重新格式化数据结构需要递归循环。随着数据结构的大小和嵌套的增长,您的时间和复杂性将增加。
我建议您创建一个 Package lo-dash.get和change-case的函数。
示例:
getData(dataStructure, path, case, defaultValue);
预先格式化整个数据结构可能成本高昂,并会导致性能问题