2017-06-13 95 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);