Return an object key only if value is true

為{幸葍}努か 提交于 2020-06-25 07:41:08

问题


How do i return an object key name only if the value of it is true?

I'm using underscore and the only thing i see is how to return keys which is easy, i want to avoid redundant iterations as much as possible:

example:

Object {1001: true, 1002: false} 

I want an array with only 1001 in it...


回答1:


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




回答2:


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




回答3:


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/



来源:https://stackoverflow.com/questions/25095789/return-an-object-key-only-if-value-is-true

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!