2017-08-25 53 views
4

隨着Lodash omit例如除去對象的特性與此片的代碼:刪除從一個對象中的屬性,而無需創建一個新的(否刪除operateur)

this.current.obj = omit(this.current.obj, ['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent']) 

但是,這將創建另一個目的this.current.obj ,但在我的情況下,我需要保持相同的對象

您有替代解決方案嗎?但不是delete運營商

+0

你是什麼意思「需要保持同一個對象」?你需要對象 - 舊的(與屬性)和新的(沒有他們)? – Dekel

回答

2

您可以使用lodash的_.unset()從對象中刪除屬性

var obj = { a: 1, b: 2, c: 3 }; 
 

 
_.unset(obj, 'a'); 
 

 
console.log(obj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

2

您有其他解決方案嗎?但不是delete運營商

沒有。您的選擇是創建一個只包含您想要的屬性的新對象,或者使用delete運算符從現有對象中刪除屬性(這可能會對屬性查找性能產生重大影響,儘管實際情況是否取決於您的頻率'使用該對象的屬性)。

好吧,在技術上你可以纏繞在原來一個Proxy對象,並使用hasownKeysget等掛鉤假裝屬性不存在。但是你必須通過代理訪問它。

1

不,沒有其他解決方案。我強烈建議使用純粹的功能方法:不要修改變量,而是改變它們並創建新變量。如果您需要保留相同的對象(相同的內存分配),那麼delete運算符是您唯一的選擇。

0

您可以將屬性設置爲undefined,然後當您嘗試訪問它時,結果將與如果該屬性不存在相同。

myObject = { 
    myProp = 'myValue' 
} 

myObject.myProp = undefined; 
console.log(myObject.myProp); 
console.log(myObject.inexistentProp); 
相關問題