Javascript 在js中将数组中的所有键从下划线转换为驼峰大小写
所以,我需要在js中将数组中的所有键从下划线转换为驼峰空间。这就是我在将表单发送到服务器之前需要做的事情。我使用的是Javascript 在js中将数组中的所有键从下划线转换为驼峰大小写,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,所以,我需要在js中将数组中的所有键从下划线转换为驼峰空间。这就是我在将表单发送到服务器之前需要做的事情。我使用的是Angular.js,我想将其表示为一个过滤器(但我认为在这种情况下它并不重要)。不管怎样,这是我创建的一个函数 .filter('underscoreToCamelKeys', function () { return function (data) { var tmp = []; function keyReve
Angular.js
,我想将其表示为一个过滤器(但我认为在这种情况下它并不重要)。不管怎样,这是我创建的一个函数
.filter('underscoreToCamelKeys', function () {
return function (data) {
var tmp = [];
function keyReverse(array) {
angular.forEach(array, function (value, key) {
tmp[value] = underscoreToCamelcase(key);
});
return tmp;
}
var new_obj = {};
for (var prop in keyReverse(data)) {
if(tmp.hasOwnProperty(prop)) {
new_obj[tmp[prop]] = prop;
}
}
return new_obj;
};
function underscoreToCamelcase (string) {
return string.replace(/(\_\w)/g, function(m){
return m[1].toUpperCase();
});
}
})
在这里,我将尝试解释它是如何工作的,因为它一开始看起来很糟糕
sublineToCamelCase
函数只需将下划线中的任何字符串还原为大小写,第一个字符除外(如some\u string=>someString
)
所以,正如我前面所说的,我应该将所有键还原为camel case,但正如您所理解的,我们不能简单地编写
date[key] = underscoreToCamelcase(key)
所以keyReverse
函数返回一个还原的数组,下面是一个示例
some_键
=>值
将是
value
=>someKey
最后,我简单地将键和值还原回来,得到这个
someKey
=>value
但是,正如您可能已经理解的,我遇到了一个问题,如果数组中存在相同的值,那么这些数据将不相似
排列
某些键1
=>值
,
some_-key2
=>value
返回为
someKey2
=>value
那我该怎么解决呢?我有一个建议,检查这些值是否存在,是否需要添加一些特殊的子字符串,如下所示
某些键1
=>值
,
some_-key2
=>value
value
=>someKey1
,
zx99value
=>someKey2
毕竟是为zx99解析的,但我觉得我快疯了。。。
也许有人有更好的解决办法
重要!他们的主要问题不仅仅是将一些字符串转换成驼峰大小写,而是使用数组键
.filter('underscoreToCamelKeys', function () {
return function (data) {
var tmp = {};
angular.forEach(data, function (value, key) {
var tmpvalue = underscoreToCamelcase(key);
tmp[tmpvalue] = value;
});
return tmp;
};
function underscoreToCamelcase (string) {
return string.replace(/(\_\w)/g, function(m){
return m[1].toUpperCase();
});
}
})
多亏了ryanlutgen作为替代解决方案,您可以使用
JSON.stringify
方法的可选replacer
参数
var result = JSON.stringify(myVal, function (key, value) {
if (value && typeof value === 'object') {
var replacement = {};
for (var k in value) {
if (Object.hasOwnProperty.call(value, k)) {
replacement[underscoreToCamelcase(k)] = value[k];
}
}
return replacement;
}
return value;
});
当然,您最终将得到一个字符串,并且必须调用
JSON.parse
来获取该对象。如果您使用现有库进行camelCase转换,那么您可以这样减少一个对象
import {camelCase} from 'lodash/string'
const camelCaseKeys = (obj) =>
Object.keys(obj).reduce((ccObj, field) => ({
...ccObj,
[camelCase(field)]: obj[field]
}), {})
一种解决方案是使用完全符合您需要的方法。事实并非如此,因为问题在于将数组键还原为驼峰大小写,而不是仅对字符串进行驼峰化,我已经创建了一个函数来驼峰化字符串
下划线camelcase
var str=“under_score”,rep=str.replace(/_([a-z])/,function(match,p1){返回p1.toUpperCase();});//伙计们,我的下划线到camelcase函数工作得很好,即名为下划线到camelcase
,问题是还原数组键为什么首先要切换键/值对?为什么不在执行时替换键?例如,提取值和键,删除当前键,在转换后的keyThis不处理嵌套的json对象[camelCase(字段)]:typeof obj==“object”?camelCaseKeys(obj[field]):obj[field]
可以做到这一点。嵌套对象的示例非常好,但会停止值。下面的工作: