車がたくさんあります。
car = {
make: "nissan",
model: "sunny",
colour: "red"
};
Underscore.jsを使用して、配列を色別にグループ化するにはどうすればよいですか?
いくつかのコンボを試しましたが、イテレーター条件を指定する方法がよくわかりません。
var carsGroupedByColor = _.groupBy(cars, false, colour);
var carsGroupedByColor = _.groupBy(vars, false, function(cars){ return cars[colour]; };
それらはすべて、配列内のすべてを毎回返します。
false
2番目の引数は必要ありません。次のように動作します:
var redCars = _.groupBy(cars, 'colour');
2番目のパラメーターはfunction
またはstring
のいずれかであることに注意してください。 string
の場合、アンダースコアはそのプロパティ名でグループ化されます。
ドキュメントから取られた:
コレクションをセットに分割し、各値をiteratorで実行した結果でグループ化します。 iteratorが関数ではなく文字列の場合、各値でiteratorという名前のプロパティでグループ化します。
実施例 です。
アンダースコアjsを使用したことはありませんが、ドキュメントどおりではないでしょうか
var groupedCars = _.groupBy(cars, function(car) { return car.make; });
実際、イテレータが文字列の場合、代わりにその文字列名を持つオブジェクトのプロパティでグループ化されると述べているため、これはより正しいと考えています。
var groupedCars = _.groupBy(cars, "make");
その後、赤い車だけが必要な場合(本当にフィルターを使用する必要がある場合でも)、次のことができます
var redCars = groupedCars["red"];
代わりにフィルターを使用するには
リスト内の各値を調べ、真理値テスト(反復子)に合格したすべての値の配列を返します。存在する場合、ネイティブフィルターメソッドへのデリゲート。
var redCars = _.filter(cars, function(car) { return car.colour == "red" });
var data = [
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
},
{
"name": "eddie",
"color": "green",
"age": "77"
},
{
"name": "Dheeraj",
"color": "blue",
"age": "25"
},
{
"name": "Suraj",
"color": "green",
"age": "25"
}
];
var result = _.groupBy(data,"color");
console.log(result);