代码之家  ›  专栏  ›  技术社区  ›  Mouad Ennaciri

从对象中删除属性而不创建新属性(无删除运算符)

  •  4
  • Mouad Ennaciri  · 技术社区  · 8 年前

    含Lodash omit 例如,要使用此代码删除对象的属性,请执行以下操作:

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

    但这将创建另一个对象 this.current.obj ,但在我的情况下,我需要保留相同的对象

    你有替代方案吗?但不是 delete 操作人员

    4 回复  |  直到 8 年前
        1
  •  2
  •   Ori Drori    8 年前

    你可以用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
  •  2
  •   T.J. Crowder    8 年前

    delete 操作人员

    运算符从现有对象中删除属性(这可能会对属性查找性能产生重大影响,尽管这实际上是否重要取决于您使用该对象属性的频率)。

    Proxy 对象并使用 has , ownKeys get 等等。挂钩以假装该属性不存在。但你必须通过代理访问它。

        3
  •  1
  •   lukaleli    8 年前

    没有。没有替代方案。我强烈建议使用纯函数方法:不要修改变量,而是转换它们并创建新的变量。如果需要保持相同的对象(相同的内存分配),那么 delete

        4
  •  0
  •   viltor    8 年前

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

    myObject = {
        myProp = 'myValue'
    }
    
    myObject.myProp = undefined;
    console.log(myObject.myProp);
    console.log(myObject.inexistentProp);