繁体   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