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

时间:2014-08-02 13:57:15

标签: javascript object underscore.js

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

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

示例:

Object {1001: true, 1002: false} 

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

5 个答案:

答案 0 :(得分:21)

Object.keys从对象获取密钥,然后您可以根据值filter {/ 3>}

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

var keys = Object.keys(obj);

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

FIDDLE

答案 1 :(得分:9)

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

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

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

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

// keys variable is ["1001"]

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

所以代码如下:

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

// keys variable is ["1001"]

我希望这会有所帮助

答案 2 :(得分:4)

如果你试图将过滤和迭代组合在一个对象上,那么你通常会在_.reduce之后(瑞士军刀迭代器):

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

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

答案 3 :(得分:2)

如果你有一个对象,它的属性不同于布尔值,你可能想用过滤器删除它们:

@vsync 混音

var obj = {1001: true, 1002: false, 1003: "foo"};
keys = Object.keys(obj).filter(k => obj[k] === true);

//keys = ["1001"];

答案 4 :(得分:0)

Timestamp,Column_1,Column_2,Column_3,Column_4,Column_5
2021-04-13 11:03:13+02:00,3,3,3,12,12
2021-04-13 11:03:14+02:00,999,999,999,999,999
2021-04-13 11:03:15+02:00,999,999,999,999,999
2021-04-13 11:03:17+02:00,3,48,3,3,3
2021-04-13 11:03:18+02:00,999,999,999,999,999