我如何减少字符串对象:bool对成一个'true only'字符串的数组?

Met*_*uru 0 underscore.js

假设我有一个这样的对象:

{ "foo" : true, "bar" : false, "gob" : true, "lob" : false }
Run Code Online (Sandbox Code Playgroud)

我想将它减少为具有相关真值的字符串键数组:

[ "foo", "gob" ]
Run Code Online (Sandbox Code Playgroud)

我怎么用下划线做这个?

rai*_*7ow 5

一种可能的方法:

var obj = { "foo" : true, "bar" : false, "gob" : true, "lob" : false };
var res = _.filter(_.keys(obj), function(k) { return obj[k]; });
console.log(res); // ['foo', 'gob']
Run Code Online (Sandbox Code Playgroud)

演示.换句话说,我们收集给定对象的所有键,然后过滤掉相应值为假的那些键.


替代方案(基于减少):

var res = _.reduce(obj, function(memo, v, k) { 
  if (v) {
    memo.push(k);
  }
  return memo;
}, []);
Run Code Online (Sandbox Code Playgroud)

演示.它作为一个代码更复杂,但它只是一次遍历集合.