[英]Transform all keys in array from underscore to camel case in js
因此,我需要將數組中的所有鍵從下划線轉換為js中的駱駝空間。 那是在將表單發送到服務器之前我需要做的。 我正在使用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();
});
}
})
在這里,我將嘗試解釋它的工作原理,因為起初看起來很糟糕。
underscoreToCamelcase
函數只是將underscoreToCamelcase
任何字符串還原為大小寫,首字符除外(例如some_string => someString
)
因此,正如我之前說的,我應該將所有鍵都還原為駝峰式大小寫,但是正如您所知,我們不能簡單地編寫
date[key] = underscoreToCamelcase(key)
所以keyReverse
函數返回一個還原數組,這是示例
some_key
=> value
將會
value
=> someKey
最后,我只是將鍵和值還原回去
someKey
=> value
但是,正如您已經理解的那樣,我遇到了一個問題,如果數組中存在相同的值,這些數據將消失
排列
some_key1
=> value
, some_key2
=> value
返回為
someKey2
=> value
那我該如何解決呢? 我建議檢查這些值是否存在,以及是否添加一些特殊的子字符串,如下所示
some_key1
=> value
, some_key2
=> value
value
=> someKey1
, zx99value
=> someKey2
並最終將其解析為zx99,但我想我要瘋了……也許有人在這種情況下有更好的解決方案?
重要! 他們的主要問題不僅是將字符串轉換為駝峰式大小寫,還需要使用數組鍵!
如果使用現有庫進行camelCase轉換,則可以像這樣減少對象
import {camelCase} from 'lodash/string'
const camelCaseKeys = (obj) =>
Object.keys(obj).reduce((ccObj, field) => ({
...ccObj,
[camelCase(field)]: obj[field]
}), {})
.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
來獲取對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.