[英]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.