簡體   English   中英

從對象中刪除屬性而不創建新屬性(No delete operateur)

[英]Delete a property from an object without creating a new one (No delete operateur)

用Lodash omit例如用這段代碼刪除對象的屬性:

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

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

你有另一種解決方案嗎? 但不是delete操作符

你有另一種解決方案嗎? 但不是delete操作符

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

好的,從技術上講,你可以在原始文件周圍包裝一個Proxy對象,並使用hasownKeysget等鈎子來假裝該屬性不存在。 但是你必須通過代理訪問它。

您可以使用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> 

不,沒有替代解決方案。 我強烈建議使用純函數方法:不要修改變量,而是轉換變量並創建新變量。 如果您需要保留相同的對象(相同的內存分配),那么delete運算符是您唯一的選擇。

您可以將該屬性設置為undefined,然后當您嘗試訪問該屬性時,結果將與該屬性不存在時的結果相同。

myObject = {
    myProp = 'myValue'
}

myObject.myProp = undefined;
console.log(myObject.myProp);
console.log(myObject.inexistentProp);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM