我有一个对象,我正在迭代它的属性以便更改它们(我想将'a.1'-kind替换为'a [1]' - kind):
.fail(function (data) {
var errors = data.responseJSON;
console.log("Object before: ", errors);
console.log("Changed properties:")
for (var property in errors) {
if (errors.hasOwnProperty(property)) {
if (property.includes('.')) {
property = property.replace(/\./, "[");
property = property.replace(/$/, "]");
console.log(property);
}
}
}
console.log("Object after: ", errors);
属性在迭代期间会发生变化,但对象的属性不会因实际而改变:
如何在迭代它们时更改对象的属性,但“永远”?:)
感谢任何帮助:)
答案 0 :(得分:2)
您可以删除并重新分配:
String
您可能会问为什么
if (property.includes('.')) {
errors[property.replace(/\./, "[").replace(/$/, "]")]=errors[property];
delete errors[property];
}
不行吗? Well属性与对象无关。它只是一串......
答案 1 :(得分:0)
与上面@Jonas w中的帖子一样,您可以执行删除并重新分配值。
此处的另一个示例(不包括您的字符串替换/正则表达式逻辑,但显示了如何更新/更改密钥:
let logger = document.querySelector('pre');
let obj = {
foo: 'foo-value',
bar: 'foo-value',
baz: 'foo-value',
qux: 'foo-value'
};
logger.innerHTML = `Original: ${JSON.stringify(obj, null, 2)}\n`;
Object.keys(obj).forEach((oldKey) => {
let newKey = oldKey + '-new';
let originalVal = obj[oldKey];
obj[newKey] = originalVal;
delete obj[oldKey];
});
logger.innerHTML += `Updated: ${JSON.stringify(obj, null, 2)}\n`;

<pre></pre>
&#13;
答案 2 :(得分:0)
功能性方法:
function replaceProperties(obj) {
var newObj = Object.getOwnPropertyNames(obj).reduce(function (newObj, prop) {
var newProp = prop;
if (prop.includes('.')) {
newProp = prop.replace(/\./, "[").replace(/$/, "]");
}
newObj[newProp] = obj[prop];
return newObj;
}, {});
return newObj;
}
var newObj = replaceProperties(errors);