user3214546
user3214546

Reputation: 6831

How can i get keys based on values in underscore

I have this object

{'a': 'test1', 'b': 'test2', 'c': 'test3'}

Then i have

[{name: 'test1', selected: true}, {name: 'test3', selected: true}]

Now i want to get final list of keys whose selected is true in second object

['a', 'c']

How can i do that in underscore

I tried this

var inv_obj = _.invert(obj);

                            return _

                                .filter(objectList, function (obj) {
                                    return obj.selected
                                })
                                .map(function (obj, inv_obj) {
                                    return inv_obj[obj] ?:''
                                })

Upvotes: 1

Views: 75

Answers (2)

Rico Chen
Rico Chen

Reputation: 2298

Try:

var a={'a': 'test1', 'b': 'test2', 'c': 'test3'};
var b=[{name: 'test1', selected: true}, {name: 'test3', selected: true}];

var c=_.pluck(_.where(b, {selected: true}), 'name');
// ['test1', 'test3']

var d=_.invert(a);
console.log(_.values(_.pick(d, c)));

Upvotes: 1

Bitwise Creative
Bitwise Creative

Reputation: 4105

var obj = {'a': 'test1', 'b': 'test2', 'c': 'test3'};
var col = [{name: 'test1', selected: true}, {name: 'test2', selected: false}, {name: 'test3', selected: true}];

var inv_obj = _.invert(obj);

var final = _.filter(col, function(obj) {
    return obj.selected;
}).map(function (obj) {
    return inv_obj[obj.name];
});

console.log(final);

Upvotes: 0

Related Questions