仅当值为true时才返回对象键

use*_*182 16 javascript object underscore.js

如果对象键名称的值为true,我该如何返回它?

我正在使用下划线,我唯一看到的是如何返回容易的键,我想尽可能避免冗余迭代:

例:

Object {1001: true, 1002: false} 
Run Code Online (Sandbox Code Playgroud)

我想要一个只有1001的数组......

ade*_*neo 25

Object.keys从对象获取键,然后您可以根据值过滤

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

var keys = Object.keys(obj);

var filtered = keys.filter(function(key) {
    return obj[key]
});
Run Code Online (Sandbox Code Playgroud)

小提琴

  • 较短:`keys = Object.keys(obj).filter(k => obj[k])` (14认同)

Tom*_*Tom 10

还有另一种方法,可以使用两种方法与Lodash库一起使用:

  • _.pickBy - 它创建一个由对象属性组成的对象.如果没有其他参数(谓词),则所有返回的属性都将具有值.
  • _.keys(object) - 从给定对象创建一个键数组

所以在你的例子中它将是:

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

// keys variable is ["1001"]
Run Code Online (Sandbox Code Playgroud)

使用Underscore.js库,它将非常相似.你需要使用_.pick_.keys功能.唯一的区别是_.pick需要具有谓词函数,即_.identity.

所以代码如下:

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

// keys variable is ["1001"]
Run Code Online (Sandbox Code Playgroud)

我希望这会有所帮助


mu *_*ort 5

如果您尝试将过滤和迭代结合起来,您通常需要的对象_.reduce(瑞士军刀迭代器):

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

演示: http: //jsfiddle.net/ambiguously/2et6T/