亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JavaScript:對象重命名鍵

JavaScript:對象重命名鍵

冉冉說 2019-07-10 14:41:57
JavaScript:對象重命名鍵是否有一種聰明(即優化)的方法來重命名javascript對象中的鍵?一種非優化的方法是:o[ new_key ] = o[ old_key ]; delete o[ old_key ];
查看完整描述

3 回答

?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

我相信,最完整(也最正確)的做法是:

if (old_key !== new_key) {
    Object.defineProperty(o, new_key,
        Object.getOwnPropertyDescriptor(o, old_key));
    delete o[old_key];}

此方法確保重命名的屬性行為一致原來的那個。

而且,在我看來,將其包裝成函數/方法并將其放入Object.prototype與你的問題無關。


查看完整回答
反對 回復 2019-07-10
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

您可以將工作包裝在一個函數中,并將其分配給Object原型。可能會使用FLUENT接口樣式使多個重命名流。

Object.prototype.renameProperty = function (oldName, newName) {
     // Do nothing if the names are the same
     if (oldName == newName) {
         return this;
     }
    // Check for the old property name to avoid a ReferenceError in strict mode.
    if (this.hasOwnProperty(oldName)) {
        this[newName] = this[oldName];
        delete this[oldName];
    }
    return this;};

ECMAScript 5特異性

我希望語法不是這么復雜,但是有更多的控制是絕對好的。

Object.defineProperty(
    Object.prototype, 
    'renameProperty',
    {
        writable : false, // Cannot alter this property
        enumerable : false, // Will not show up in a for-in loop.
        configurable : false, // Cannot be deleted via the delete operator
        value : function (oldName, newName) {
            // Do nothing if the names are the same
            if (oldName == newName) {
                return this;
            }
            // Check for the old property name to 
            // avoid a ReferenceError in strict mode.
            if (this.hasOwnProperty(oldName)) {
                this[newName] = this[oldName];
                delete this[oldName];
            }
            return this;
        }
    });


查看完整回答
反對 回復 2019-07-10
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

如果要變異源對象,ES6可以在一行中完成。

delete Object.assign(o, {[newKey]: o[oldKey] })[oldKey];

或者兩行,如果您想創建一個新的對象。

const newObject = {};delete Object.assign(newObject, o, {[newKey]: o[oldKey] })[oldKey];


查看完整回答
反對 回復 2019-07-10
  • 3 回答
  • 0 關注
  • 986 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號