2016-11-14 4 views
2

У меня есть вход:Lodash или JS GroupBy и Графский массив массивов

results = [ 
    [ "Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS1", "small", "SW192EZ", "undefined" ], 
    [ "Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS2", "large", "SW192EZ", "undefined" ], 
    [ "Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS2", "large", "SW192EZ", "undefined" ], 
    [ "Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS2", "medium", "SW192EZ", "undefined" ], 
] 

Я хочу выход быть что-то вроде

small 
    DryKISS1 : 1 
medium 
    DryKISS2 : 1 
large 
    DryKISS1 : 5 
    DryKISS2 : 2 
    DryKISS3 : 1 

В основном группировки по размеру, а затем суммирование названия компании в скобках того же размера.

Я играл с ниже, но заблудился в большинстве примеров для хэш/объекты

console.log _.chain(results).groupBy(4).map((value, key) -> 
    [ 
    key 
    _.reduce(value, ((result, currentObject) -> 
     { 
     company: result[ 3 ] 
     } 
    )) 
    ] 
).value() 

Любой помощь оценила

+0

не могли бы вы объяснить более подробно, как вы ожидаете ваши переданные данные, чтобы стать вашим ожидаемым результатом, так как я не видел его. Для начала я не вижу ни одного DryKISS3 в ваших данных. Кроме того, это ваш реальный адрес электронной почты, если вы знаете, что скребки могут схватить это, и вы собираетесь получать спам .. :) – Keith

ответ

1

Попросту Javascript, вы можете использовать объект с вложенным свойства для счетчика.

var results = [["Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS1", "small", "SW192EZ", "undefined"], ["Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "ian.wa[email protected]", "DryKISS2", "large", "SW192EZ", "undefined"], ["Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS2", "large", "SW192EZ", "undefined"], ["Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS2", "medium", "SW192EZ", "undefined"]], 
 
    grouped = {}; 
 

 
results.forEach(function (a) { 
 
    grouped[a[4]] = grouped[a[4]] || {}; 
 
    grouped[a[4]][a[3]] = (grouped[a[4]][a[3]] || 0) + 1; 
 
}); 
 

 
console.log(grouped);

с максимальным кол

var results = [["Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS1", "small", "SW192EZ", "undefined"], ["Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS2", "large", "SW192EZ", "undefined"], ["Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS2", "large", "SW192EZ", "undefined"], ["Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS2", "medium", "SW192EZ", "undefined"]], 
 
    grouped = {}, 
 
    max = { count: 0, keys: [] }; 
 

 
results.forEach(function (a) { 
 
    grouped[a[4]] = grouped[a[4]] || {}; 
 
    grouped[a[4]][a[3]] = (grouped[a[4]][a[3]] || 0) + 1; 
 
    if (grouped[a[4]][a[3]] > max.count) { 
 
     max = { count: grouped[a[4]][a[3]], keys: [{ size: a[4], group: a[3] }] }; 
 
     return; 
 
    } 
 
    if (grouped[a[4]][a[3]] === max.count) { 
 
     max.keys.push = { size: a[4], group: a[3] }; 
 
    } 
 
}); 
 

 
console.log(max); 
 
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

'Я хочу, чтобы результат был чем-то вроде', не выглядит одинаковым. :) Скорее всего, что он после, но было бы неплохо, если бы ФП сделал источник данных и ожидаемые результаты, воспроизводимыми. – Keith

+0

Отличное спасибо - я пытался найти путь loDash, но это простой метод ванили, который должен использоваться, я чувствую. –

+0

Ahh one issue, как бы я сортировать их, поэтому count is top? –

3

Группа по 4-й колонке, а затем использовать преобразование для подсчета элементов по 3-й колонке:

var data = [ 
 
    ["Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS1", "small", "SW192EZ", "undefined"], 
 
    ["Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS2", "large", "SW192EZ", "undefined"], 
 
    ["Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS2", "large", "SW192EZ", "undefined"], 
 
    ["Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "[email protected]", "DryKISS2", "medium", "SW192EZ", "undefined"], 
 
]; 
 
    
 
var result = _(data) 
 
    .groupBy(4) 
 
    .transform(function(result, items, key) { 
 
    result[key] = _.countBy(items, 3); 
 
    }) 
 
    .value(); 
 
    
 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.0/lodash.min.js"></script>

+0

Многие thx я выбрал версию JS ниже, но также дал вам преимущество. –

Смежные вопросы