【问题标题】:One liner to delete multiple object properties一个班轮删除多个对象属性
【发布时间】:2018-12-04 16:13:37
【问题描述】:

我有一些对象属性需要在某些时候删除,但我仍然需要其他属性,所以我不能只写 delete vm.model; 来删除所有这些属性。

目前我需要删除 5 个属性,但列表很可能会增加,所以我不想结束。

delete vm.model.$$hashKey;
delete vm.model.expiryDate;
delete vm.model.sentDate;
delete vm.model.startDate;
delete vm.model.copied;

我正在寻找可以为我做这件事的单班轮。我做了一些研究,发现了 _.omit lodash 函数,但我不想最终只为一个函数下载整个库。

是否有 angularjs/js 函数可以一次清除多个属性?

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

目前还没有本地函数可以做到这一点;但你总是可以循环和delete:

const obj = {
  prop1: 'foo',
  prop2: 'bar',
  prop3: 'baz'
}

;[ 'prop1', 'prop2' ].forEach(prop => delete obj[prop])

console.log(obj)
    

...找到了 _.omit lodash 函数,但我不想最终只为一个函数下载整个库。

只需将相同的概念抽象为一个函数并重用它:

const obj = {
  prop1: 'foo',
  prop2: 'bar',
  prop3: 'baz'
}

const filterKeys = (obj, keys = []) => {
  // NOTE: Clone object to avoid mutating original!
  obj = JSON.parse(JSON.stringify(obj))

  keys.forEach(key => delete obj[key])

  return obj
}

const result1 = filterKeys(obj, ['prop1', 'prop2'])
const result2 = filterKeys(obj, ['prop2'])

console.log(result1)
console.log(result2)

【讨论】:

  • 在箭头的位置 WebStorm 需要一个表达式。知道为什么吗?
  • 是的,您(很可能)使用的是过时的语言版本。见:stackoverflow.com/a/35650011/1814486
【解决方案2】:

没有什么可以简化的,可以使用数组

["a","b","c"].forEach(k => delete vm.model[k])

【讨论】:

    【解决方案3】:

    看看这个:

    > const {a,b, ...newArray} = {a:1,b:2,c:3,d:4}
    > newArray
    { c: 3, d: 4 }
    

    【讨论】:

      猜你喜欢
      • 2014-09-11
      • 2020-08-29
      • 2021-02-22
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多