【问题标题】:How to keep certain properties on an object?如何保留对象的某些属性?
【发布时间】:2019-02-10 02:36:37
【问题描述】:

我有这个对象。如果某个属性的值为 null,我将删除该属性。但是我有一些特殊的属性,我想无论如何(即使它们的值为空)。到目前为止,我的代码运行良好,但我不喜欢我必须一遍又一遍地使用 OR || 运算符的事实。 示例:

key === 'alwaysCountWithMe' ||键 === 'ABC' ||键 ==='doNotDeleteMe' ||键 === 'specialProperty'

这是我的代码:

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>

有没有一种更简洁的方法可以做到这一点而不必一遍又一遍地使用 ||

【问题讨论】:

    标签: javascript arrays object ecmascript-6 lodash


    【解决方案1】:

    使用一个key数组来一直保存,看看是不是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】:

      是的,使用数组和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】:

        我会将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】:

          一种解决方案是将您的密钥保存在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>

          【讨论】:

            猜你喜欢
            • 2014-04-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-19
            • 2014-04-11
            • 1970-01-01
            • 1970-01-01
            • 2013-05-28
            相关资源
            最近更新 更多