Итак, я уже давно работаю над этой задачей, и я столкнулся с проблемой. Я пробовал и переписывал снова и снова и, похоже, не мог найти достаточно хорошего решения.Комплексная сортировка для массива объектов
Я пытаюсь сортировать один массив объектов в другой массив объектов. Я использую нокаут, но решение не должно включать нокаут, если его можно сделать более непосредственно в ванильном JS или jQuery.
поясню:
Мы начнем с observableArray serials
с объектами некоторые серийный номер в нем. Этот массив всегда содержит этот формат:
var serials = ko.observableArray([
{ number: "DFG09008", qty: 1 },
{ number: "DFG09009", qty: 1 },
{ number: "DFG09010", qty: 1 },
{ number: "DFG09011", qty: 1 },
{ number: "DFG09020", qty: 1 },
{ number: "ASD-0001", qty: 1 },
{ number: "ASD-0002", qty: 1 },
{ number: "HJ-DRT-06", qty: 1 },
{ number: "HJ-DRT-07", qty: 1 },
{ number: "POU055054", qty: 1 }
]);
// qty property is for something unrelated to this in the app
Желаемый результат функции я пишу то, что он будет выводить на другой observableArray displaySerials
, который будет использоваться, чтобы представить идею «числовой диапазон»:
var displaySerials = ko.observableArray([
{ beginSerial: "DFG09008", endSerial: "DFG09011" },
{ beginSerial: "DFG09020", endSerial: "" },
{ beginSerial: "ASD-0001", endSerial: "ASD-0002" },
{ beginSerial: "HJ-DRT-06", endSerial: "HJ-DRT-07" },
{ beginSerial: "POU055054", endSerial: "" }
]);
Таким образом, из-за serials
«первых четырех членов» number
собственности, "DFG09008", "DFG09009", "DFG09010", "DFG09011"
иметь соответствующий префикс (DFG090
) и число суффиксов, которые являются смежными (8, 9, 10, 11
), они помещаются в объект, где beginSerial
является самое низкое число в диапазоне (DFG09008
) и endSerial
является самым высоким (DFG09011
). Обратите внимание, что "DFG09020"
помещается в отдельный объект. Это связано с тем, что он не является последовательным с другими числами в группе, поэтому он рассматривается сам по себе.
Любой серийный номер, который не имеет никакого отношения к остальной части группы помещается в собственный объект, где endSerial
свойство является пустая строка: { beginSerial: "DFG09020", endSerial: "" }
только определенные правила для пути серийные номера структурированы, что они всегда будут заканчиваться номером. Но в коллекции могут быть десятки или сотни.
только требования к допустимым решения являются вещи, упомянутые выше, а также:
- Массив
serials
должен остаться без изменений по ходу этой функциональности. - Решение не является конкретным или зависит от какой-либо строковой структуры для сериалов, за исключением того, что они заканчиваются номером.
Любой вклад высоко ценится!
Вы не включили путь вы в настоящее время сортировки в самом вопросе пока. Не могли бы вы добавить его и сообщить нам, где находится конкретная проблема? (Кроме того, вам будет полезно *** много здесь, начиная с модульных тестов. Преобразуйте свой человекообразный spec в автоматизированные тесты: это будет стоить ваше время наверняка!) – Jeroen