根据值获取对象键

时间:2017-03-14 19:31:40

标签: javascript arrays object lodash

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

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

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

myArray2 = [
    'Person1',
    'Person3
];

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

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

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

4 个答案:

答案 0 :(得分:2)

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

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

var validKeys = Object.keys(myObject).filter(function (key) { 
    return myObject[key] === true; 
});

答案 1 :(得分:1)

使用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);

请勿忘记在key的帮助下查看hasOwnProperty(),否则此方法可能会导致结果中出现不需要的keys

答案 2 :(得分:0)

您可以使用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)

答案 3 :(得分:0)

由于标记了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>