从对象中删除属性而不创建新属性(No delete operateur)

时间:2017-08-25 12:19:15

标签: javascript object ecmascript-6 lodash

使用Lodash $( document ).on( 'click', '.reset-to-default-img', function(e) { alert($('#widget-gallery-posts-widget-__i__-image').val()); }); 例如使用这段代码删除对象的属性:

<MediaQuery maxDeviceWidth={767}>
   this will shown only on mobile
</MediaQuery>

但是这会创建另一个对象const isMobile = MediaQuery < 768; return <div className={isMobile ? "mobile" : "desktop"} ,但在我的情况下我需要保留相同的对象

您有替代解决方案吗?但不是omit运算符

4 个答案:

答案 0 :(得分:2)

  

您有替代解决方案吗?但不是delete运算符

不。您的选择是创建一个只包含所需属性的新对象,或者使用delete运算符从现有对象中删除属性(这可能会对属性查找性能产生重大影响,尽管这实际上是否重要依赖于你使用该对象属性的频率。

好的,从技术上讲,你可以在原始文件周围包裹一个Proxy对象,然后使用hasownKeysget等挂钩假装该属性不会存在。但是您必须通过代理访问它。

答案 1 :(得分: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 :(得分:1)

没有。没有替代解决方案。我强烈建议使用纯函数方法:不要修改变量,而是转换变量并创建新变量。如果您需要保留相同的对象(相同的内存分配),那么add_filter( 'woocommerce_get_related_product_tag_terms', 'remove_related_tags' ); function remove_related_tags( $terms ) { foreach ( $terms as $key => $term ) { if ( 'Đồng Hồ Thụy Sỹ' === $term->name ) { unset( $terms[ $key ] ); } if ( 'dong-ho-thuy-sy' === $term->slug ) { unset( $terms[ $key ] ); } if ( 'Đồng Hồ 6 Kim' === $term->name ) { unset( $terms[ $key ] ); } if ( 'Citizen Eco-Drive' === $term->name ) { unset( $terms[ $key ] ); } if ( 'Seiko Kinetic' === $term->name ) { unset( $terms[ $key ] ); } if ( 'Seiko Solar' === $term->name ) { unset( $terms[ $key ] ); } if ( 'Đồng Hồ Dây Da Nam Nữ' === $term->name ) { unset( $terms[ $key ] ); } } return $terms; } 运算符是您唯一的选择。

答案 3 :(得分:0)

您可以将该属性设置为undefined,然后当您尝试访问该属性时,结果将与该属性不存在时的结果相同。

myObject = {
    myProp = 'myValue'
}

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