Sanityzacja danych w trakcie sortowania

Sanityzacja danych w trakcie sortowania
KI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
0
Kopiuj
export const sortData = (logical, column, array)=> {array.sort((a,b)=>{
      return logical  ? (a[column] < b[column] ? 1 : -1): (a[column] > b[column] ? 1 : -1);
    });};

Mam taką zwykłą funkcję sortująca tablicę Jest tylko jedno ale: stosuję ją do wszystkich kolumn tablicy a jedna z nich zawiera dane dające w wyniku użycia tej funkcji złe wyniki. Mam też funkcję, która potrafi zamienić element dający złe wyniki na element dający dobre wyniki. Tyle, że za bardzo nie wiem jak to zrobić.

  1. Nie chcę zamieniać 'złych' danych w tabeli, gdyż korzysta z nich wiele innych funkcji i musiałbym zmieniać wszystkie. Ale w ostateczności tak zrobię.
  2. Pomyślałem, że obejmę tą funkcją korygującą wyrażenia typu a[column]. Jednak to nie działa (nie działa też przyłożenie do tego nawet prostej funkcji obrabiającej teksty - sprawdziłem dla pewności)a po zastanowieniu doszedłem do wniosku, że a[column] nie jest faktycznym elementem.

I tu pytanie, czy mimo tego nie można w jakiś sposób tej funkcji korygującej tam przemycić? Myślałem o zagnieżdżonym callbacku ale po pierwsze to nie bardzo na moją głowę, po drugie nie jestem pewien czy to dobry pomysł.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Dlaczego w funkcji przekazywanej do array.sort wykorzystujesz a[column] oraz b[column] zamiast a oraz b?

jedna z nich zawiera dane dające w wyniku użycia tej funkcji złe wyniki. Mam też funkcję, która potrafi zamienić element dający złe wyniki na element dający dobre wyniki

Możesz coś więcej podać? Konkretne przypadki etc.

KI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
0

Tak. W ogólności to jest projekt React. a[column] bierze wartości z kolumny na której było kliknięcie.
Natomiast błąd wyskakujący przy próbie opatulenia a[column] funkcją polega na tym, że jakakolwiek funkcja by to nie była, dostaję komentarz typu x.funkcja nie jest funkcją

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Bez kodu mogę jedynie stwierdzić, że coś robisz źle.

KI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
0

Spróbuję wkleić ale to nie będzie cały kod, na to jest za długi
To jest obsługa sortowania

Kopiuj

sortHandle (e) {
  
  var isDescending = this.state.columnSortBy === e.target.cellIndex &&!this.state.isSortDescending;
  this.setState({columnSortBy:e.target.cellIndex, isSortDescending: isDescending});
 }
  

To jest sortowanie

Kopiuj
export const sortStaff = (logical, column, array)=> {array.sort((a,b)=>{
      return logical  ? ((a[column],' ') < b[column] ? 1 : -1): (a[column] > b[column] ? 1 : -1);
    });};

W ten sposób eventhandler jest przypięty do strony

Kopiuj
<thead onClick={ this.sortHandle} >

a to jest funkcja która zmienia sposób wyświetlania daty na teoretycznie zdatny do łatwego sortowania

Kopiuj


      const sli = (txt, pattern, end=null)=>{let a=null; if (end===null) {a= txt.slice(0, txt.indexOf(pattern));} 
      else{a=txt.slice(txt.indexOf(pattern)+1);}return a; } ;
      

  const reshape =(tekst)=>{
    let Birth = null;
   // if (tekst.indexOf(':')==-1) { Birth = tekst;}
    let begin=sli(tekst,' ');
    begin= begin.split('.');
    begin.reverse();
    let end=sli(tekst,' ',-3);
    end=end.split(':');
    Birth = (begin.concat(end));
    for (var i = 0; i < Birth.length; i++) {
      if (Birth[i].length === 1) {
        Birth[i] = "0" + Birth[i];}}
  Birth = Birth.join();
  Birth= Birth.replace(/,/g,'');
  
    tekst = Birth;
    };
  

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.