繁体   English   中英

根据值获取对象键

[英]Get object keys based on value

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

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();

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

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

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

使用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出现在结果中。

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

由于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> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM