группировать по многомерному массиву на основе 2 значений - PullRequest
0 голосов
/ 28 октября 2019

Я брожу, если кто-нибудь из вас может помочь мне, пожалуйста.

У меня есть массив значений в каждой строке (Order,Material,StorageBin,Batch,Greasing(yes,no),Qty) ... 800 строк

Iсделано с помощью функции groupBy ... она возвращает все значения с общим QTY ...

Проблема в том, что мне нужно сгруппировать компоненты groupBY для смазки, поэтому я подумал добавить GROUP NUMBER ... Component1 может бытьс Компонентом 3,4,5 в качестве GROUP1, тогда Компонент 2 может быть с Компонентом 6,7,8 AS GROUP2 ...

один КОМПОНЕНТ имеет много НОМЕРОВ ЗАКАЗА, но также может подключать больше КОМПОНЕНТОВ для смазки ...

в основном: (if greasing = yes check if component is in group...if no create group and add component...but all that based on ORDER NUMBER so I can tell why do they connect)

у меня болит голова ... кто-нибудь, пожалуйста?!

ДАННЫЕ

ОТ:

[4363348,comp1,C01020001,1,130,greasing],
[4363348,comp2,C02060201,1,130,greasing],
[4363348,comp3,C01040001,1,130,No],
[4363349,comp1,C01020001,1,130,greasing],
[4363349,comp4,C02060201,1,130,greasing],
[4363349,comp5,C01040001,1,130,No],
[4363350,comp6,C01020001,1,130,greasing],
[4363350,comp7,C02060201,1,130,greasing],
[4363350,comp5,C01040001,1,130,No]

TO:

[4363348,comp1,C01020001,1,130,greasing,1],
[4363348,comp2,C02060201,1,130,greasing,1],
[4363348,comp3,C01040001,1,130,No,0],
[4363349,comp1,C01020001,1,130,greasing,1],
[4363349,comp4,C02060201,1,130,greasing,1],
[4363349,comp5,C01040001,1,130,No,0],
[4363350,comp6,C01020001,1,130,greasing,2],
[4363350,comp7,C02060201,1,130,greasing,2],
[4363350,comp5,C01040001,1,130,No,0]

1 Ответ

0 голосов
/ 28 октября 2019

Вы можете взять столбец Материал и получить мубер из строки, взять целое третье значение и добавить его.

const getMaterialNumber = s => 1 + Math.floor(s.match(/\d+$/) / 3);

var array = [[4363348, 'comp1', 'C01020001', 1, 130, 'greasing'], [4363348, 'comp2', 'C02060201', 1, 130, 'greasing'], [4363348, 'comp3', 'C01040001', 1, 130, 'No'], [4363349, 'comp1', 'C01020001', 1, 130, 'greasing'], [4363349, 'comp4', 'C02060201', 1, 130, 'greasing'], [4363349, 'comp5', 'C01040001', 1, 130, 'No'], [4363350, 'comp6', 'C01020001', 1, 130, 'greasing'], [4363350, 'comp7', 'C02060201', 1, 130, 'greasing'], [4363350, 'comp5', 'C01040001', 1, 130, 'No']],
    result = array.map(a => [...a, a[5] === 'greasing' ? getMaterialNumber(a[1]) : 0]);

result.forEach(a => console.log(...a));
.as-console-wrapper { max-height: 100% !important; top: 0; }
...