如何使用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; });
谢谢
如果要从selected
为true
任何电子邮件地址中提取所有数组元素,可以这样迭代:
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})