0
votes

Comment trier un tableau à l'aide d'un texte recherché dans JavaScript?

J'ai recherché "HR001" et il renvoie tous les index ayant "HR001". C'est acceptable. Mais je veux trier ce tableau à l'aide de texte recherché ("HR001").

Regardez le code donné. Ici, retourne premier et dernier élément de ce tableau lorsque j'ai recherché "HR001" et la commande Array est: "Code": "SFHR001", "Code": "HR001". P>

Depuis que j'ai cherché "HR001" Et il correspond pleinement à "Code": "HR001", donc je veux montrer "Code": "HR001" comme premier élément P>

p>

var items = [
    {
        "id": 1,
        "code": "SFHR001",
        "property": "8''",
        "description": "Half Round",
        "productGroup": {
            "id": 2,
            "name": "Steel Files",
        }
    },
    {
        "id": 2,
        "code": "MR004",
        "property": "7''",
        "description": "Polished",
        "productGroup": {
            "id": 3,
            "name": "Pliers",
        }
    },
    {
        "id": 2,
        "code": "HR001",
        "property": "7''",
        "description": "Fine Polished",
        "productGroup": {
            "id": 3,
            "name": "Hand Reveter",
        }
    },
]

search = (item, searchedText) => { 

  return item["code"].toLowerCase().indexOf(searchedText.toLowerCase()) > -1
    
}


var ac = items.filter((item) => {
  return search(item, 'hr001');
});

console.log(ac);

// var sortWithInputText = ac.sort(..........................)


9 commentaires

Est-ce que cela répond à votre question? Trier les suggestions Timeahead avec l'entrée exacte au sommet


Vous voulez correspondre à un mot exact ou que vous souhaitez aussi avoir une correspondance partielle aussi?


@Hereticmonkey no. Je veux trier un tableau en utilisant mon texte recherché


@ Md.robiollah, tu veux comme ça? Codepen.io/manmur/pen/zyxgjlz


AC.Sort ((A, B) => A.Code.TolowerCase (). Indexof ('HR001') - B.Code.TolowerCase (). Indexof ('HR001')) Quelque chose comme Cela fera le travail


@Codemaniac je veux une correspondance partielle. Ensuite, je dois le trier selon mon texte recherché


J'utiliserais une forme de mécanisme de notation, vous pouvez baser cela sur la longueur de la recherche et le résultat, la longueur la plus proche va au sommet.


C'est exactement ce que font les réponses à cette question. Les correspondances exactes sont déplacées vers le haut, car les matchs divergent, ils sont déplacés plus loin du haut. Avez-vous essayé les réponses?


@Hereticmonkey no. Je vais essayer ce frère


3 Réponses :


1
votes

Essayez ceci:

items
.filter(el => el.code.toLowerCase().indexOf('hr001')>-1)
.sort((a,b)=> a.code.toLowerCase() < b.code.toLowerCase() ? -1 : 1)


0 commentaires

1
votes

Vous avez besoin d'une sorte de logique pour décider quel est le plus proche, ..

Un exemple simple peut être de baser sur la longueur, de même que la longueur de résultat et la longueur du terme de recherche sont proches, celles-ci vont au sommet. Vous pourriez faire plus de marquage plus favtant que cela, mais vous devrez décider de la logique qui se rapporte. par exemple. Il y a même quelque chose appelé algorithme Soundex, vous voudrez peut-être fusionner avec cela etc. https: // fr. wikipedia.org/wiki/soundex p>

Mais en utilisant le test de longueur simple en tant que guide, ci-dessous est un exemple simple. Il redevient également à String String comparant si le score de chaque élément est égal. P>

p>

var items = [
    {
        "id": 1,
        "code": "SFHR001",
        "property": "8''",
        "description": "Half Round",
        "productGroup": {
            "id": 2,
            "name": "Steel Files",
        }
    },
    {
        "id": 2,
        "code": "MR004",
        "property": "7''",
        "description": "Polished",
        "productGroup": {
            "id": 3,
            "name": "Pliers",
        }
    },
    {
        "id": 2,
        "code": "HR001",
        "property": "7''",
        "description": "Fine Polished",
        "productGroup": {
            "id": 3,
            "name": "Hand Reveter",
        }
    },
]

search = (item, searchedText) => { 

  return item["code"].toLowerCase().indexOf(searchedText.toLowerCase()) > -1
    
}

const searchTerm = 'hr001';

function score(a) {
  return Math.abs(searchTerm.length - a.code.length);
}


var ac = items.filter((item) => {
  return search(item, searchTerm);
}).sort((a, b) => {
  //sort by score, if equal fall back to compare.
  return score(a) - score(b) ||
    a.code.localeCompare(b.code);
});

console.log(ac);

// var sortWithInputText = ac.sort(..........................)


0 commentaires

1
votes

Vous semblez rechercher une fonction «Trier par champ».

JS's ''s> Array.Prototype.sort Fonction prend un paramètre facultatif qui est "Trier l'algorithme". Ceci est juste une fonction qui prend 2 params et renvoie -1 si le premier param doit être indexé d'abord, 1 si le second doit être indexé en premier et 0 s'ils sont égaux.

https: // www. w3schools.com/js/js_array_sort.asp xxx


0 commentaires