Sanityzacja danych w trakcie sortowania

0
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ł.

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.

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ą

0

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

0

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


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

To jest sortowanie

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

<thead onClick={ this.sortHandle} >

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



      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;
    };
  

1 użytkowników online, w tym zalogowanych: 0, gości: 1