15

私は車の配列を持っています。

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

それらはすべて、毎回配列内のすべてを返します。

4

3 に答える 3

38

You don't need the false second argument, the following will work:

var redCars = _.groupBy(cars, 'colour');

Note that the second parameter can either be a function or a string. If it's a string Underscore groups by that property name.

Taken from the docs:

Splits a collection into sets, grouped by the result of running each value through iterator. If iterator is a string instead of a function, groups by the property named by iterator on each of the values.

Here's a working example.

于 2012-07-20T15:31:56.810 に答える
10

アンダースコア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" });
于 2012-07-20T15:30:34.483 に答える
3
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);
于 2016-02-01T07:09:44.853 に答える