私はそのようなオブジェクトを持っています:
_> Object
> [email protected]: Array[100]
> [email protected]: 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;
}));
}
all要素がselected
である配列のみをプルしたい場合は、代わりに次のようにします。
var stuff = _.filter(me.collections, function(item) {
return _.all(item, function (jtem) {
jtem.selected === true;
});
});
アンダースコアのフィルターメソッドは、ハッシュまたはディクショナリとして使用されているオブジェクトに対して機能しますが、オブジェクトの列挙可能な値の配列を返し、キーを取り除きます。キーを保持する値でハッシュをフィルタリングする関数が必要で、これを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":""}
これは醜いですが、オブジェクトをフィルタリングするためのアンダースコアベースの方法を求めました。これは、偽ではない値を持つフィルター要素のみを返す方法です。フィルタのreturnステートメントを必要なものに切り替えることができます。
var nonEmptyFilters = _.pick.apply({}, [allFilterValues].concat(_.filter(_.keys(allFilterValues), function(key) {
return allFilterValues[key];
})));
出力(JSON /文字列化):
{"originDivision":"GFC"}