Можно ли отсортировать массив объектов по двум столбцам, но только с учетом значений между двумя разделителями?
Я хотел бы, например, отсортировать по убыванию по размеру, а затем по поверхности, но только с учетом значения между "-" и "-".
Точно так же, как если бы у меня было:
array=[
{surface: "200", size: "Medium"},
{surface: "200", size: "Small"},
{surface: "100", size: "Big"},
{surface: "300", size: "Medium"},
]
Отсортировано по:
array=[
{surface: "500", size: "Small"},
{surface: "300", size: "Medium"},
{surface: "200", size: "Medium"},
{surface: "100", size: "Big"}
]
Но вместо этого массива:
array=[
{surface: "9809-200-45450", size: "fghddffz-Medium-yuifgghj"},
{surface: "1212-200-43483", size: "sdfsfsdf-Small-fgdfgd"},
{surface: "2323-100-43264", size: "gdfgsdfg-Big-sddfgdfg"},
{surface: "9809-300-45450", size: "qdfgqdfg-Medium-hjkghj"},
]
И сортируя его так:
array=[
{surface: "1212-500-43483", size: "sdfsfsdf-Small-fgdfgd"},
{surface: "9809-300-45450", size: "qdfgqdfg-Medium-hjkghj"},
{surface: "9809-200-45450", size: "fghddffz-Medium-yuifgghj"},
{surface: "2323-100-43264", size: "gdfgsdfg-Big-sddfgdfg"}
]
При стандартной сортировке я бы сделал следующее:
array.sort(function(a, b){
if(a.size == b.size){
return (a.surface < b.surface) ? 1 : (a.surface > b.surface ) ? -1 : 0;
}
else{
return (a.size < b.size) ? 1 : -1;
}
});
Но я понятия не имею, как заменить «a / b.surface» или «a / b.size» только частью их значения, а не всей их стоимостью. Я даже не уверен, что это возможно.
Любой совет в правильном направлении был бы великолепен.
Спасибо.