你可能會這樣做。
第一個replace
可以用來代替任何你想成爲上套管駱駝套管標記的字符。
第二個replace
對標記後面的字母執行駱駝套管。
最後的replace
確保標識符的第一個字母是小寫。
standardiseProperties
適用object
適用於使用camelCase
的規則。但是,您也可以讓它返回新對象standardised
。
如果由於名稱已經存在而無法使用,則使用原始名稱。
我沒有花太多時間在這方面,可以優化,或者你可能希望有所改變的規則。
的Javascript
function camelCase(string) {
return string.replace(/[-+]/g, "_").replace(/_([\da-z])/gi, function (all, letter) {
return letter.toUpperCase();
}).replace(/^([A-Z])/, function (all, letter) {
return letter.toLowerCase();
});
}
function standardiseProperties(object) {
var standardised = {},
newName,
i;
for (i in object) {
if (object.hasOwnProperty(i)) {
newName = camelCase(i);
if (standardised.hasOwnProperty(newName)) {
standardised[i] = object[i];
} else {
standardised[newName] = object[i];
}
delete object[i];
}
}
for (i in standardised) {
object[i] = standardised[i];
}
}
var object = {
"firstName": "Joe",
"MiddleName": "Roy",
"last_name": "Fool"
};
console.log(object);
standardiseProperties(object);
console.log(object);
輸出
Object {firstName: "Joe", MiddleName: "Roy", last_name: "Fool"}
Object {firstName: "Joe", middleName: "Roy", lastName: "Fool"}
在jsfiddle
「*我想打一個新的對象*」 始終是一個總的副本,還有什麼你的想法? – Bergi
你不知道哪些違規必然是正確的?你正在尋找某種語言分析器? – oooyaya
這個問題回答瞭如何迭代對象的trought屬性名稱:http://stackoverflow.com/questions/85992/how-do-i-enumerate-the-properties-of-a-javascript-object –