如何使用Underscore.jsfilter与对象?

我有一个像这样的对象:

> 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; }); 

谢谢

如果要从selectedtrue任何电子邮件地址中提取所有数组元素,可以这样迭代:

 var selected = []; for (email in emailLists) { selected.concat(_.filter(emailLists[email], function (item) { return item.selected === true; })); } 

如果您只想拉出选择了所有元素的数组,您可能会执行以下操作:

 var stuff = _.filter(me.collections, function(item) { return _.all(item, function (jtem) { jtem.selected === true; }); }); 

Underscore的filter方法将对用作哈希或字典的对象起作用,但它将返回对象的可枚举值的数组并删除键。 我需要一个函数来过滤哈希值,它会保留密钥,并在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()很棒!

我有一个名为allFilterValues的对象,其中包含以下内容:

 {"originDivision":"GFC","originSubdivision":"","destinationDivision":"","destinationSubdivision":""} 

这很难看,但是你要求使用基于下划线的方法来过滤对象。 这就是我只返回具有非虚假值的滤镜元素的方式; 您可以将filter的return语句切换为您需要的任何内容:

  var nonEmptyFilters = _.pick.apply({}, [allFilterValues].concat(_.filter(_.keys(allFilterValues), function(key) { return allFilterValues[key]; }))); 

输出(JSON /字符串化):

 {"originDivision":"GFC"} 

也许你想要一个最简单的方法

 _.filter(me.collections, { selected: true})