Return an object key only if value is true

There is another alternative, which could be used with Lodash library using two methods:

  • _.pickBy - it creates an object composed of the object properties. If there is no additional parameter (predicate) then all returned properties will have truthy values.
  • _.keys(object) - creates an array of keys from the given object

So in your example it would be:

var obj = {1001: true, 1002: false};
var keys = _.keys(_.pickBy(obj));

// keys variable is ["1001"]

Using Underscore.js library, it would be very similar. You need to use _.pick and _.keys functions. The only difference is that _.pick would need to have predicate function, which is _.identity.

So the code would be as follows:

var obj = {1001: true, 1002: false};
var keys = _.keys(_.pick(obj, _.identity));

// keys variable is ["1001"]

I hope that will help


If you're trying to combine filtering and iterating over an object you're usually after _.reduce (the Swiss Army Knife iterator):

var trues = _(obj).reduce(function(trues, v, k) {
    if(v === true)
        trues.push(k);
    return trues;
}, [ ]);

Demo: http://jsfiddle.net/ambiguous/2et6T/


Object.keys gets the keys from the object, then you can filter the keys based on the values

var obj = {1001: true, 1002: false};

var keys = Object.keys(obj);

var filtered = keys.filter(function(key) {
    return obj[key]
});

FIDDLE