Мне нужно отсортировать таблицу для углового проекта. Суть в том, что для некоторых значений в таблице мне нужно отсортировать по прямому свойству объектов в массиве, но для других мне нужно отсортировать по потомку этого прямого свойства.
Например, у меня есть associate.lastname
для одного столбца и associate.client.name
для другого столбца. Я пытаюсь сделать все это одним методом, и у меня есть рабочий метод в TypeScript.
Это метод sortBy
в классе моего компонента:
sortBy(option: SortOption, sortedBy: string) {
const props = option.split('.');
const parent = props[0];
const child = props[1];
const asc = this[sortedBy];
if(!child) {
this.associates.sort((associateA, associateB)=> {
if (associateA[parent] < associateB[parent]) {
return asc === true ? -1 : 1;
} else if (associateB[parent] < associateA[parent]) {
return asc === true ? 1 : -1;
} else {
return 0;
}
});
} else {
this.associates.sort((associateA, associateB)=> {
if (associateA[parent][child] < associateB[parent][child]) {
return asc === true ? -1 : 1;
} else if (associateB[parent][child] < associateA[parent][child]) {
return asc === true ? 1 : -1;
} else {
return 0;
}
});
}
this[sortedBy] = !this[sortedBy]
}
SortOption
- это перечисление, и значение может содержать или не содержать .
. Я разделил этот период, чтобы получить родительские и дочерние свойства, а затем отсортировал массив по тому, существует ли родительский или дочерний.
Теперь мне интересно, есть ли лучший, более сухой способ сделать это. Вы заметите, что код в операторах if и else практически одинаков, за исключением того, используется ли дочернее свойство или нет, но я не могу придумать более чистого способа сделать это.
Есть ли лучший способ?