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

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

vue2 如何去除帶__ob__這樣的數據?

vue2 如何去除帶__ob__這樣的數據?

達令說 2018-12-19 18:18:51
data: function () {    return {        cityData: cityData,        selectedOptions:this.source[this.schema_key]    }}console上面的this.source[this.schema_key]如下[24, 81, __ob__: Observer]有么有一種方式可以直接這樣獲取這樣數據[24, 81]
查看完整描述

1 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

__ob__: Observer這些數據是vue這個框架對數據設置的監控器,一般都是不可枚舉的。


console.log這樣的打印函數,被打印的變量會執行自身的toString(),這樣,即便內部屬性是不可枚舉,實際上也能看到。舉個例子:


const obj = {

    a: 0,

    b: 1

};

Object.defineProperty(obj, 'b', {

    writable: false,

    enumerable: false,

    configurable: false

});


console.log(obj);    // Object {a: 0, b: 1}

因為你已經將數據綁定在了vue之中,vue就肯定要為數據添加監控器的,如果你強制刪掉了這些監控器,那么這些數據也就失去了監控,那么你使用vue的意義何在……


如果僅僅是去掉這些監控器而不考慮后果的話,把對象復制一份就行了,因為復制的對象是不包含不可枚舉屬性的。


const obj1 = {

    a: 0,

    b: 1

};

Object.defineProperty(obj1, 'b', {

    writable: false,

    enumerable: false,

    configurable: false

});

const obj2 = Object.assign({}, obj1);


console.log(obj2);    // Object {a: 0}

js這類動態語言,復制對象是個很頭疼的事情。我寫了個簡單的,你可以參考一下:


//對象深復制,不考慮循環引用的情況

function cloneObj(from) {

    return Object.keys(from)

        .reduce((obj, key) => (obj[key] = clone(from[key]), obj), {});

}

//數組深復制,不考慮循環引用的情況

function cloneArr(from) {

    return from.map((n) => clone(n));

}

// 復制輸入值

function clone(from) {

    if (from instanceof Array) {

        return cloneArr(from);

    } else if (from instanceof Object) {

        return cloneObj(from);

    } else {

        return (from);

    }

}


const obj = [

    {

        name: '1'

    },

    {

        name: '2'

    }

];

const obj2 = clone(obj);

console.log(obj2);

在外面直接用clone()方法就行了。


查看完整回答
反對 回復 2019-01-12
  • 1 回答
  • 0 關注
  • 770 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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