10

私はそのようなオブジェクトを持っています:

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

ありがとうございました

4

5 に答える 5

9

が である任意の電子メール アドレスからすべての配列要素を取得する場合selectedtrue、次のように繰り返すことができます。

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;
    });
});
于 2012-07-28T02:27:54.873 に答える
5

Underscore のフィルター メソッドは、ハッシュまたは辞書として使用されているオブジェクトに対して機能しますが、オブジェクトの列挙可能な値の配列を返し、キーを取り除きます。キーを保持する値でハッシュをフィルタリングする関数が必要で、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()は素晴らしいです!

于 2014-08-22T21:56:45.440 に答える
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"}
于 2013-08-28T21:42:24.310 に答える
-2

多分あなたは最も簡単な方法が欲しい

_.filter(me.collections, { selected: true})
于 2016-08-12T14:31:24.163 に答える