2017-06-13 94 views
0

我有一个对象,以改变他们,我通过它的属性迭代(我想要替换“a.1'实物‘一[1]’ - 种):改变的Javascript对象属性

.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

请通过<>按钮提供真实的代码... –

+0

) –

回答

2

您可以删除并重新分配:

if (property.includes('.')) { 
    errors[property.replace(/\./, "[").replace(/$/, "]")]=errors[property]; 
    delete errors[property]; 
} 

你可能会问,为什么

property=property.replace(..); 

不工作? Well属性以任何方式与对象无关。它只是一个字符串...

+0

'property.replace(/\.(.+)$ /,“[$ 1]”)'稍微多一点简洁。 –

+0

@Jonas w,谢谢。 但你能解释一下,为什么 1)错误[property.replace(/\./,“[”).replace(/ $ /,“]”)] = errors [property];而不是: errors [property] = errors [property.replace(/\./,“[”).replace(/ $ /,“]”)]; –

+0

@Jonas w, 为什么我们需要: 删除错误[属性]; ? –

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>

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);