javascript - 如何修改对象中的键值?
问题描述
我有第一个对象:
var objectOne = { my_key_1 : value1, my_key_2 : value2 } ;
我想将该对象复制到另一个对象中,但键名不同。
键名应该这样写“myKey1”,所以我做了这个函数:
function stringRenaming(oldStr) {
oldVStr = oldStr.split("_") ;
var newStr = oldStrr[0] ;
for(i = 1 ; i < oldStr.length ; i++ ) {
newStr += oldStr[i].substring(0, 1).toUpperCase()+oldStr[i].substring(1) ;
}
return newStr ;
}
下面的代码完美地复制了第二个对象中的第一个对象:
var objectTwo = {} ;
for (var i in objectOne) {
if((objectOne[i] !== '') && (objectOne[i] !== undefined) && (objectOne[i] !== null) && (objectOne[i].length !== 0)) {
objectTwo[i] = objectOne[i] ;
}
}
但是,我找不到将重命名功能应用于第二个对象的键的方法。我试图用替换线objectTwo[i] = objectOne[i];
,objectTwo[i] = objectOne[i];
但它不起作用。
我尝试在第一个循环之后添加另一个循环来编辑键值,但效果相同。大多数时候,我的键名很好,但值未定义。
我不知道现在该尝试什么,您能帮忙吗?
解决方案
您可以将下划线和后面的字符替换为大写字符。
var format = s => s.replace(/(_)(.)/g, (_, __, c) => c.toUpperCase()),
objectOne = { my_key_1: 'value1', my_key_2: 'value2' },
result = Object.fromEntries(Object.entries(objectOne).map(([k, v]) => [format(k), v]));
console.log(result);
没有箭头函数和解构。
var format = function (s) { return s.replace(/(_)(.)/g, function (_, __, c) { return c.toUpperCase(); }); },
objectOne = { my_key_1: 'value1', my_key_2: 'value2' },
result = Object.keys(objectOne).reduce(function (r, key) {
r[format(key)] = objectOne[key];
return r;
}, {});
console.log(result);
推荐阅读
- flutter - 一键放大和缩小
- sql - 可配置的 SQL GROUP BY 变量
- java - 配置 Spring Boot 时 classpath:/some/packages 与 file:/some/url 之间的区别
- python - 搜索每个子数组中的最小值的函数
- android - 尝试集成 AdMob (IronSource) 后无法在 Unity 中构建 APK
- android - scrollTo 在 Android 上没有动画
- tensorflow - 使用批量归一化计算网络输入的导数:训练与推理时间
- elasticsearch - 无法在 Nest 中选择子聚合
- javascript - 每当数据库中的数据发生变化时,我们如何更新 react-app 中的 DOM?
- android - 如何使编辑文本视图像搜索栏一样工作?