Javascript更改对象属性

时间:2017-06-13 19:05:07

标签: javascript object properties

我有一个对象,我正在迭代它的属性以便更改它们(我想将'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);

属性在迭代期间会发生变化,但对象的属性不会因实际而改变:

enter image description here

如何在迭代它们时更改对象的属性,但“永远”?:)

感谢任何帮助:)

3 个答案:

答案 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;
&#13;
&#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);