如何将一个 PascalCase 属性的 JavaScript 对象克隆为 camelCase 属性的对象(使用 JavaScript)?

5
当我序列化一个ASP.NET MVC表单时,我会得到这个结果:
{
  DestinationId: "e96dd00a-b042-41f7-bd59-f369904737b6",
  ...
}

但我希望这样做,以使其与JS编码规范保持一致:
{
  destinationId: "e96dd00a-b042-41f7-bd59-f369904737b6",
  ...
}

如何将一个对象的每个属性的首字母转换为小写?

3个回答

4

简单的方法是对您的对象进行迭代:

var newObj = {};
for (var p in o) {
    newObj[p.substring(0,1).toLowerCase()+p.substring(1)] = o[p];
}

也许有更优雅的解决方案 - 在将JSON字符串转换为JS对象之前,通过正则表达式替换。 - Damask

2

还需要检查hasOwnProperty,并删除以前的属性

var object = { DestinationId: "e96dd00a-b042-41f7-bd59-f369904737b6" }
for ( var prop in object ) {
  if ( object.hasOwnProperty( prop ) ) {
    object[ prop.substring(0,1).toLowerCase() + prop.substring(1) ] = object[ prop ];
    delete object[ prop ];
  }
}

为什么要使用hasOwnProperty进行检查?你的Object.prototype有额外的功能吗?如果是这样的话,那就不好了。你必须定义自己的构造函数。 - Damask

1
"我想把这些东西视为字符串并使用正则表达式的能力来处理,这不是更好吗?"
" JSON.parse( JSON.stringify(z).replace( /(\"[^"])([^"]*\"\:)/g, function(all, head, tail) { return head.toLowerCase() + tail; } ) ) "

实际上,如果它从后端以字符串形式返回,则不需要进行第一个 stringify。 - Damask

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接