【问题标题】:Get object keys based on value根据值获取对象键
【发布时间】:2017-03-14 19:31:40
【问题描述】:

我有一个用例,我有一个可变值的对象,我需要获取所有这些具有特定值的键。例如,这是一个示例对象:

myObject = {
    Person1: true,
    Person2: false,
    Person3: true,
    Person4: false
};

键名会有所不同,但有效值为真或假。我想获取一个值为 true 的名称数组:

myArray2 = [
    'Person1',
    'Person3
];

我一直在尝试结合使用各种 lodash 函数,例如 _.key() 和 _.filter,但没有成功。我怎样才能做到这一点?我对纯 JS 或 Lodash 选项持开放态度。

更新:我接受了下面 mhodges 的回答作为接受的答案,尽管其他人给了我相同的答案。基于此,我想出了一个 Lodash 版本:

var myArray = _(myObject).keys().filter(function(e) {
    return myObject[e] === true;
}).value();

【问题讨论】:

    标签: javascript arrays object lodash


    【解决方案1】:

    如果我正确理解您的问题,您应该可以使用基本的.filter() 来解决此问题。

    myObject = {
        Person1: true,
        Person2: false,
        Person3: true,
        Person4: false
    };
    
    var validKeys = Object.keys(myObject).filter(function (key) { 
        return myObject[key] === true; 
    });
    

    【讨论】:

      【解决方案2】:

      由于 Lodash 被标记:使用 pickBy 可以过滤值(以及使用 _.keys 获得的键):

      var myArray2  = _.keys(_.pickBy(myObject));
      

      var myObject = {    Person1: true,    Person2: false,    Person3: true,    Person4: false  };
        
      var myArray2  = _.keys(_.pickBy(myObject));
      
      console.log(myArray2 );
      <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

      【讨论】:

      • 哦,很好。我错过了 _.pickBy()。谢谢。
      【解决方案3】:

      使用 Object.keys():

      var object = {
          1: 'a',
          2: 'b',
          3: 'c'
      };
      console.log(Object.keys(object));
      

      替代解决方案:

      var keys = [];
      for (var key in object) {
          if (object.hasOwnProperty(key)) {
              keys.push(key);
          }        
      }    
      console.log(keys);
      

      不要忘记在hasOwnProperty() 的帮助下检查key,否则这种方法可能会导致不需要的keys 出现在结果中。

      【讨论】:

        【解决方案4】:

        您可以使用Object.keys()filter() 来做到这一点。

        var myObject = {
          Person1: true,
          Person2: false,
          Person3: true,
          Person4: false
        };
        
        var result = Object.keys(myObject).filter(function(e) {
          return myObject[e] === true;
        })
        console.log(result)

        带有箭头功能的ES6版本

        var result = Object.keys(myObject).filter(e => myObject[e] === true)
        

        【讨论】:

        • 谢谢内纳德。不幸的是,我目前仅限于 ES5。 ES5 语法是什么?
        猜你喜欢
        • 2021-07-25
        • 1970-01-01
        • 1970-01-01
        • 2017-08-03
        • 2021-08-25
        • 1970-01-01
        • 2021-12-29
        • 2021-09-13
        • 1970-01-01
        相关资源
        最近更新 更多