Подтвердить что ты не робот

Использование группы подчеркивания для группировки массива автомобилей по цвету

У меня есть массив автомобилей.

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

Все они возвращают все в массиве каждый раз.

4b9b3361

Ответ 1

Вам не нужен второй аргумент false, будет работать следующее:

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

Обратите внимание, что второй параметр может быть либо function, либо string. Если это имя string Underscore разделяется этим именем свойства.

Взято из документов:

Разделяет коллекцию на множества, сгруппированные по результату запуска каждого значение через итератор. Если Итератор является строкой вместо функции, групп по свойству, названному итератором для каждого из значений.

Здесь рабочий пример.

Ответ 2

Я никогда не пользовался символом подчеркивания 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" });

Ответ 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);