我有一个像这样的对象:
> Object
> Rett@site.com: Array[100]
> pel4@gmail.com: Array[4]
> 0
id : 132
selected : true
> 1
id : 51
selected : false
等。
如何使用下划线_.filter()
仅返回选中的项目=== true?
我从未需要使用_.filter()
进入图层。像
var stuff = _.filter(me.collections, function(item) {
return item[0].selected === true;
});
谢谢
答案 0 :(得分:9)
如果要从selected
为true
的任何电子邮件地址中提取所有数组元素,可以这样迭代:
var selected = [];
for (email in emailLists) {
selected.concat(_.filter(emailLists[email], function (item) {
return item.selected === true;
}));
}
如果你只想拉出所有元素为selected
的数组,你可能会做这样的事情:
var stuff = _.filter(me.collections, function(item) {
return _.all(item, function (jtem) {
jtem.selected === true;
});
});
答案 1 :(得分:5)
下划线的过滤器方法将对用作哈希或字典的对象起作用,但它将返回对象的可枚举值的数组并去掉键。我需要一个函数来过滤哈希值,这个值会保留密钥,并在Coffeescript中写道:
hash_filter: (hash, test_function) ->
keys = Object.keys hash
filtered = {}
for key in keys
filtered[key] = hash[key] if test_function hash[key]
filtered
如果你没有使用Coffeescript,那么这里的编译结果是Javascript,清理了一下:
hash_filter = function(hash, test_function) {
var filtered, key, keys, i;
keys = Object.keys(hash);
filtered = {};
for (i = 0; i < keys.length; i++) {
key = keys[i];
if (test_function(hash[key])) {
filtered[key] = hash[key];
}
}
return filtered;
}
hash = {a: 1, b: 2, c: 3};
console.log((hash_filter(hash, function(item){return item > 1;})));
// Object {b=2, c=3}
TL; DR:Object.keys()很棒!
答案 2 :(得分:1)
我有一个名为allFilterValues的对象,其中包含以下内容:
{"originDivision":"GFC","originSubdivision":"","destinationDivision":"","destinationSubdivision":""}
这很丑陋,但您要求使用基于下划线的方式来过滤对象。这就是我只返回具有非虚假值的滤镜元素的方式;您可以将过滤器的return语句切换为您需要的任何内容:
var nonEmptyFilters = _.pick.apply({}, [allFilterValues].concat(_.filter(_.keys(allFilterValues), function(key) {
return allFilterValues[key];
})));
输出(JSON /字符串化):
{"originDivision":"GFC"}
答案 3 :(得分:1)
@Dexygen 使用 _.pick 是正确的,但更简洁的解决方案是可能的,因为该函数也接受谓词
<块引用>返回对象的副本,过滤后仅包含允许键(或有效键数组)的值。 或者接受一个指示选择哪些键的谓词。
(亮点是我的)
这是我在一个项目中使用的真实例子
_.pick({red: false, yellow: true, green: true}, function(value, key, object) {
return value === true;
});
// {yellow: true, green: true}
答案 4 :(得分:-2)
也许你想要一种最简单的方式
_.filter(me.collections, { selected: true})