代码之家  ›  专栏  ›  技术社区  ›  Devmix

如何在对象上保留某些属性?

  •  1
  • Devmix  · 技术社区  · 6 年前

    我有这个东西。如果属性的值为 无效的 我要搬走那房子。但是我有一些我想保留的特殊属性 不管怎样 (即使它们的值为空)。到目前为止,我的代码工作得很好,但我不喜欢必须使用或的事实 γ 接线员一遍又一遍。 例子:

    key=='AlwaysCountWithMe'key=='abc'key==='DonotDeleteMe' ||键=='特殊属性'

    以下是我的代码:

    var object = {
      "firstname": null,
      "lastname": "White",
      "ABC": null,
      "hobby": null,
      "c": 3,
      "alwaysCountWithMe": null,
      "doNotDeleteMe": null,
      "specialProperty": null,
    };
    
    console.log(_.pickBy(object, (value, key) => !!value || key === 'alwaysCountWithMe' || key === 'ABC' || key === 'doNotDeleteMe' || key === 'specialProperty'));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

    有没有更干净的方法不用 γ 一遍又一遍?.

    4 回复  |  直到 6 年前
        1
  •  2
  •   CertainPerformance    6 年前

    使用一组键始终保持,并检查是否 includes(key) :

    var object = {
      "firstname": null,
      "lastname": "White",
      "ABC": null,
      "hobby": null,
      "c": 3,
      "alwaysCountWithMe": null,
      "doNotDeleteMe": null,
      "specialProperty": null,
    };
    const alwaysKeep = ['alwaysCountWithMe', 'ABC', 'doNotDeleteMe', 'specialProperty'];
    
    console.log(_.pickBy(object, (value, key) => !!value || alwaysKeep.includes(key)));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
        2
  •  2
  •   Jack Bashford    6 年前

    是,使用数组和 includes :

    var object = {
      "firstname": null,
      "lastname": "White",
      "ABC": null,
      "hobby": null,
      "c": 3,
      "alwaysCountWithMe": null,
      "doNotDeleteMe": null,
      "specialProperty": null,
    };
    
    console.log(_.pickBy(object, (value, key) => !!value || ['alwaysCountWithMe', 'ABC', 'doNotDeleteMe', 'specialProperty'].includes(key)));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
        3
  •  2
  •   Code Maniac    6 年前

    我会一直 alwaysKeep 作为一个 Object 而且我不需要每次都通过它循环,因为JS对象使用散列,所以我可以使用 O(1) 时间复杂性

    var object = {"firstname": null,"lastname": "White","ABC": null,"hobby": null,"c": 3,"alwaysCountWithMe": null,"doNotDeleteMe": null,"specialProperty": null,};
    
    const alwaysKeep = {'alwaysCountWithMe': true, 'ABC': true, 'doNotDeleteMe': true, 'specialProperty':true};
    
    console.log(_.pickBy(object, (value, key) => !!value || alwaysKeep[key]));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
        4
  •  1
  •   Shidersz    6 年前

    一种解决方案是把钥匙放在 Set .

    var object = {
      "firstname": null,
      "lastname": "White",
      "ABC": null,
      "hobby": null,
      "c": 3,
      "alwaysCountWithMe": null,
      "doNotDeleteMe": null,
      "specialProperty": null,
    };
    
    const keysSet = new Set(['alwaysCountWithMe', 'ABC', 'doNotDeleteMe', 'specialProperty']);
    
    console.log(_.pickBy(object, (value, key) => !!value || keysSet.has(key)));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>