1

オブジェクトでいっぱいの配列があります:

var myArray = [{ "user": "anton" }, { "user": "joe" }];

次に、配列をアンダースコアコレクションオブジェクトにラップして、アンダースコアのコレクションメソッド(削除、追加)を自然に使用できるようにします。

myArray = _(myArray); // this only add object methods
myArray.add({ "user": "paul" });

では、アンダースコアコレクションメソッドを使用するために配列をアンダースコアでラップするにはどうすればよいですか?

4

2 に答える 2

7

受け入れられた答えは誤解を招くため、記録のために:

関数として使用されるアンダースコアは、その引数ラップします。

_([a, b, c])

と同等です:

_.chain([a, b, c])

実際chain、次のように定義されています。

_.chain = function(obj) {
  return _(obj).chain();
};

今あなたの質問に:

コレクションを提供するバックボーンと、提供しないアンダースコアを混同します。バックボーンコレクションは、配列から簡単に初期化できます。次に例を示します。

var c = new Backbone.Collection([{ "user": "anton" }, { "user": "joe" }]);

うまく動作します。さらに次のことができます。

c.add({ "user": "paul" });
于 2012-07-30T07:16:57.107 に答える
2

通常、アンダースコアAPIは配列またはオブジェクトをラップしません。最初の引数を渡すだけです。元)

_.first([5, 4, 3, 2, 1]); //Note first argument
=> 5
var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [2, 4, 6]

ただし、chain(_.chain(obj))はラップされたオブジェクトを返します。このオブジェクトのメソッドを呼び出すと、値が使用されるまでラップされたオブジェクトが返され続けます。

var stooges = [{name : 'curly', age : 25}, {name : 'moe', age : 21}, {name : 'larry', age : 23}];
var youngest = _.chain(stooges)
  .sortBy(function(stooge){ return stooge.age; })
  .map(function(stooge){ return stooge.name + ' is ' + stooge.age; })
  .first()
  .value();
=> "moe is 21"

アンダースコアAPIを確認してください:http://underscorejs.org/#

于 2012-07-29T15:17:00.653 に答える