> Faqs > Buscar el elemento ANTERIOR a uno determinado en un array de objetos con Javascript

Buscar el elemento ANTERIOR a uno determinado en un array de objetos con Javascript

Tengo un array de elementos objeto como estos en Javascript:

this.tabs = [
      {
        label: 'Singapur',
        cityId: 1
      },
      {
        label: 'Buenos Aires',
        cityId: 3
      },
      {
        label: 'New York',
        cityId: 66
      },
    ]

Quiero que, dado un número de "cityId" me devuelva el "cityId" del elemento que había justo antes de el que tiene es "cityId". Por ejemplo, si me dan 66 me debería devolver 3. En caso que no haya un elemento anterior en el array, que me devuelva el siguiente. En caso que no haya ni siguiente ni anterior, q me devuelva null.

Para buscar en arrays Javascript uso find() habitualmente, pero ¿sería posible en este caso que quierp el anterior?

Respuestas

Aquí en lugar de find() lo que te vendría bien es usar el método findIndex() que devuelve el índice del primer elemento que se encuentre en el array. El funcioamiento es casi el mismo, pero consigues el índice numérico en tu array, que luego podrás usar para conseguir el elemento anterior.

Puedes escribir una función en JavaScript que itere a través del array y busque el índice del objeto que contiene el CityId dado. Luego, según este índice, puedes determinar el CityId del elemento anterior. Si no hay un elemento anterior.

mira este código a ver si te aclara algo:

function buscarCityIdAnterior(tabs, CityId) {
  const indice = tabs.findIndex(tab => tab.CityId === CityId);

  // Si no se encuentra el elemento, devolver null
  if (indice === -1) return null;

  // Si hay un elemento anterior, devolver su CityId
  if (indice > 0) return tabs[indice - 1].CityId;

  // Si no hay anterior pero hay un siguiente, devolver el siguiente
  if (indice === 0 && tabs.length > 1) return tabs[1].CityId;

  // Si no hay ni anterior ni siguiente, devolver null
  return null;
}

// Ejemplo de uso:
const tabs = [
  { label: 'Conocimiento', CityId: 1 },
  { label: 'Crerere', CityId: 3 },
  { label: 'lalala', CityId: 66 },
];

console.log(buscarCityIdAnterior(tabs, 66)); // Debería devolver 3
console.log(buscarCityIdAnterior(tabs, 1));  // Debería devolver 3 ya que no hay anterior
console.log(buscarCityIdAnterior(tabs, 99)); // Debería devolver null ya que no existe ese CityId

Este código primero busca el índice del objeto que coincide con el CityId proporcionado. Luego, usando este índice, intenta devolver el CityId del elemento anterior. Si no hay un elemento anterior, verifica si hay un siguiente elemento para devolver. Si no hay un siguiente elemento, devuelve null.

ya me cuentas qué te ha parecido.... creo que es un buen ejemplo para aprender a trabajar con arrays, así que seguramente le servirá a otras personas también... un abrazo y saludetes.

Sergio
366 11 32 13
muchas gracias, me ha resultado muy útil tu ayuda. gracias por compartir.