我有一个用例,我有一个不同值的对象,我需要获得具有特定值的所有这些键。例如,这是一个示例对象:
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();
答案 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>