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

JavaScript-扩展和rest语法,用于从对象中删除特定属性

  •  1
  • Mouad Ennaciri  · 技术社区  · 7 年前

    let obj = {foo: 1, bar: 2, baz: 3}
    

    removeProperty(obj, propertyName) {
      let { propertyName, _, ...result } = obj
      return result
    }
    

    问题是,此方法仅在我们直接在语法spead中写入属性名称时有效,如: let { bar, _, ...result } = obj

    我们如何做到这一点,如果可能的话,除了 omit 含铅量

    2 回复  |  直到 7 年前
        1
  •  34
  •   Andrew Li    7 年前

    可以在分解结构时使用计算属性:

    let obj = {foo: 1, bar: 2, baz: 3}
    function removeProperty(obj, propertyName) {
      let { [propertyName]: _, ...result } = obj
      return result
    }
    console.log(removeProperty(obj, 'foo'));

    这将使用值的名称指定属性 propertyName 创建一个一次性变量,并从本质上删除该键。看见 the MDN documentation .

        2
  •  9
  •   AnonymousSB    7 年前

    destructuring 将使用 delete . 与其他解决方案相比,以下解决方案将时间复杂度降低了约35% 解构 (在桌面浏览器中)

    let obj = {foo: 1, bar: 2, baz: 3}
    function removeProperty(obj, propertyName) {
      let newObj = {...obj};
      delete newObj[propertyName];
      return newObj;
    }
    console.log(removeProperty(obj, 'foo'));
    

    性能测试

    https://jsperf.com/so53753276

    结果因使用的浏览器而异。结果相当有趣。桌面狩猎 ,但桌面Chrome无法执行桌面Safari中的所有数字。

    +-----------------------------------+
    | Browser | delete    | destructure |
    +---------+-----------+-------------+
    | Chrome  | 3,229,791 | 1,993,256   |
    | Safari  | 1,186,679 | 1,872,396   | 
    +---------+-----------+-------------+
    

    iOS上的结果就不那么令人惊讶了,因为Chrome实际上是一款隐藏的Safari。

    +-----------------------------------+
    | Browser | delete    | destructure |
    +---------+-----------+-------------+
    | Chrome  | 1,146,496 | 1,785,551   |
    | Safari  | 1,182,067 | 1,793,772   | 
    +---------+-----------+-------------+
    

    文档

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete

        3
  •  1
  •   Vigneshwaran Chandrasekaran    6 年前
    values = {
        id: 1,
        name: 'hello world',
        vehicle: 'car',
        time: '3.30 pm',
        date: '02 MAR 1990',
    };
    
    const { time, date, ...rest } = values;
    
    now ***...rest*** contains the object values of {
        id: 1,
        name: 'hello world',
        vehicle: 'car',
    };
    
    推荐文章