TransWikia.com

Como puedo ordenar un array de objetos con includes

Stack Overflow en español Asked on December 9, 2021

tengo un array con 34 objetos los cuales obtienen una dirección.

Cada objeto es así

{
   "name": "",
   "description": "",
   "address": "",
   "coords": {
      "lat":"",
      "lng":""
   }
}

Simplemente necesito ordenar el array para que me ponga primero los que tienen el nombre parecido a cierto string.

Por ejemplo si el string de búsqueda es "Open" me ordene el array y que primero me ponga los objetos que tienen alguna palabra relacionada con Open en el nombre.

Seria algo así:

const sorted = this.stores.sort((a, b) => {
    if (a.name.includes(myLocationCity) || b.name.includes(myLocationCity)) {
        return -1;
    }
});
  • Esto me esta funcionando, pero no se si sea la solución mas optima

Debe ser fácil de hacer, pero aun no aprendo muy bien el uso del sort

Muchísimas gracias.

One Answer

La función Array.sort() acepta una función que compara dos valores A y B y devuelve:

  • -1 si A debe ir antes que B en el array ordenado (A < B)
  • 0 si es indifirente cuál va antes (A = B)
  • 1 si A debe ir después que B (A > B)

En tu caso, si solo quieres primero los que incluyen un texto dado y luego los que no:

this.stores.sort((a, b) => {
    if (a.name.includes(myLocationCity)) {
        if (b.name.includes(myLocationCity)) {
            return 0; // son iguales
        }
        return -1; // a tiene que ir antes que b
    } else if (b.name.includes(myLocationCity)) {
        return 1; // b tiene que ir antes que a
    }
    return 0; // son iguales
});

Ten en cuenta que Array.sort() realiza la ordenación modificando el array original. No deja el original igual y devuelve otro ordenado.

Answered by jotaelesalinas on December 9, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP