我有一个对象:的JavaScript修改对象属性本身
var obj = {
'a|a' : 1,
'b|b' : 2
}
我想给obj
更改为类似:
var obj = {
'aa' : 1,
'bb' : 2
}
其中属性a|a
变更为aa
。
有没有办法做同样的事情?
我有一个对象:的JavaScript修改对象属性本身
var obj = {
'a|a' : 1,
'b|b' : 2
}
我想给obj
更改为类似:
var obj = {
'aa' : 1,
'bb' : 2
}
其中属性a|a
变更为aa
。
有没有办法做同样的事情?
有很多方法可以遍历对象。我想最简单的方法是使用一个for..in
声明:
for (let key in obj) {
console.log(key, '=>', obj[key]);
}
因此改变密钥名称将涉及使用String.replace
更改密钥名称:
var obj = {
'a|a' : 1,
'b|b' : 2
}
let newObj = {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key.replace('|', '')] = obj[key];
}
}
console.log(newObj);
如果你不不想创建新对象,可以添加新密钥并delete obj[key]
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
obj[key.replace('|', '')] = obj[key];
delete obj[key];
}
}
另一种方法是使用Array.reduce
在键/属性:
Object.getOwnPropertyNames(obj).reduce((p, c) => {
p[c.replace('|', '')] = obj[c];
return p;
}, {});
你能解释一下什么是 obj [key.replace('|','')] = obj [key]; – Adithya
当然,'key'看起来像''a | a“',所以'key.replace('|','')'会产生''aa''。 obj ['a | a']'(或'obj [key]')的值是1,所以这看起来像是'obj ['aa'] = obj ['a | a']'或'obj ['aa'] = 1' –
obj [key.replace('|','')]在现有对象内创建一个新键,'= obj [c]'将'obj [c]'的值赋值给新钥匙?这种行为是由于字符串的不变性吗?这是我们必须删除旧密钥的原因吗? – Adithya
你可以这样说:
Object.getOwnPropertyNames(obj).forEach(function (key) {
obj[key.replace('|', '')] = obj[key];
delete obj[key];
});
简单地通过所有对象键循环和值分配给新的密钥(不|
characted),事后删除旧的密钥。
这是一个很好的解决方案。我也建议'Object.getOwnPropertyNames()'而不是'Object.keys()'忽略可枚举性...... – Badacadabra
确实,我的答案会更新。感谢您指出,不知道这种差异。 –
那么,你用'Object.keys()'的解决方案是完全有效的。这只是一个建议,你不必编辑你的代码。 ;) – Badacadabra
var obj = {
'a|a': 1,
'b|b': 2
}
let keys = Object.keys(obj);
let newObj = {};
for (let key of keys) {
let transformedKey = key.replace("|","") ; // transform your key
newObj[transformedKey] = obj[key]
}
console.log(newObj);
这是修复你的用例。
之前,我可以在一个有效的方式回答这个问题,究竟是什么您期望的使用情况? – dbr
[change property name]可能的重复(http://stackoverflow.com/questions/8483425/change-property-name) – aw04
@DeanBrunt:我正在填充一个kendo网格,它不允许空格或任何特殊字符'field'属性。我的服务器实际上是将'field'和'title'属性翻译成单个对象属性,即'a | a'。最终我需要将属性更改为'aa'。 – Adithya