如果对象键名的值为true,我该如何返回对象键名?
我使用下划线,我唯一看到的是如何返回容易的键,我想尽可能避免冗余迭代:
示例:
Object {1001: true, 1002: false}
我想要一个只有1001的数组...
答案 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]
});
答案 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;
}, [ ]);
答案 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