Javascript 基于值获取对象关键帧

Javascript 基于值获取对象关键帧,javascript,arrays,object,lodash,Javascript,Arrays,Object,Lodash,我有一个用例,在这个用例中,我有一个不同值的对象,我需要得到所有这些具有特定值的键。例如,下面是一个示例对象: myObject = { Person1: true, Person2: false, Person3: true, Person4: false }; 键名称会有所不同,但有效值为true或false。我想得到一个值为true的名称数组: myArray2 = [ 'Person1', 'Person3 ]; 我一直在尝试将各种lo

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

myObject = {
    Person1: true,
    Person2: false,
    Person3: true,
    Person4: false
};
键名称会有所不同,但有效值为true或false。我想得到一个值为true的名称数组:

myArray2 = [
    'Person1',
    'Person3
];
我一直在尝试将各种lodash函数组合使用,例如u.key()和u.filter,但没有成功。我怎样才能做到这一点?我对纯JS或Lodash选项持开放态度

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

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

您可以使用
Object.keys()
filter()

var myObject={
是的,
人2:错,
是的,
人4:错
};
var result=Object.keys(myObject).filter(函数(e){
返回myObject[e]==true;
})

console.log(result)
您可以使用
Object.keys()
filter()
执行此操作

var myObject={
是的,
人2:错,
是的,
人4:错
};
var result=Object.keys(myObject).filter(函数(e){
返回myObject[e]==true;
})
console.log(结果)
使用Object.keys():

替代解决方案:

var keys = [];
for (var key in object) {
    if (object.hasOwnProperty(key)) {
        keys.push(key);
    }        
}    
console.log(keys);
不要忘记在
hasOwnProperty()
的帮助下检查
,否则这种方法可能会导致结果中显示不需要的
键。

使用Object.keys()

替代解决方案:

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

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

如果我正确理解您的问题,您应该能够使用basic
.filter()

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

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

如果我正确理解您的问题,您应该能够使用basic
.filter()
进行此操作

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

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

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

var myObject={Person1:true,Person2:false,Person3:true,Person4:false};
var myArray2=0.keys(0.pickBy(myObject));
console.log(myArray2)

自Lodash被标记以来:使用
pickBy
可以过滤值(以及使用
\uKeys
获得的键):

var myObject={Person1:true,Person2:false,Person3:true,Person4:false};
var myArray2=0.keys(0.pickBy(myObject));
console.log(myArray2)

谢谢你,内纳德。不幸的是,目前我仅限于ES5。ES5语法是什么?谢谢你。不幸的是,目前我仅限于ES5。ES5语法是什么?哦,很好。我错过了。谢谢。哦,很好。我错过了。谢谢