Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

145
Vistas
JS indexOf no funciona y siempre devuelve -1

Soy novato y no tengo mucha experiencia. Ahora intente resolver algunos problemas en el trabajo con JS, y me encontré con un gran problema. Intenté leer algunos controles de calidad sugeridos, pero no encontré una solución. Sinceramente pido ayuda, cualquier ayuda es muy apreciada.

html:

 <script> document.getElementById("autoin").addEventListener("input",doSearch); function doSearch(){ var ai = document.getElementById("autoin").value; google.script.run.withSuccessHandler(udAg).getAgent(ai); } function udAg(ag){ document.getElementById("agent").value = ag; M.updateTextFields(); } </script>

secuencia de comandos de Google:

 function getAgent(ai){ var ss = SpreadsheetApp.openByUrl(url); var ws = ss.getSheetByName("Updated"); var ctList = ws.getRange('A2:A17').getValues(); var position = ctList.indexOf(ai); return position; }

Siempre devuelve -1, incluso reemplacé la variable ai por la cadena directa 'ABC' , que es la cadena en A2. Intenté devolver tanto ai como ctList[0] , parecían ser idénticos, 'ABC' .

console.log(ctList) mostró [ [ 'ABC' ], [ 'CDE' ],[ 'EFG' ],... ]

Realmente no puedo encontrar una solución, realmente necesito molestar a todos para que me ayuden. Gracias.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Explicación

Devuelve -1 porque ejecuta un indexOf() en una matriz que contiene sub-matrices, por lo que no puede coincidir con su cadena.

Por ejemplo, puedo tomar su ejemplo como un caso de prueba mínimo y hacer esto:

 const array = [ [ 'ABC' ], [ 'CDE' ],[ 'EFG' ] ]; console.log(array.indexOf('ABC')); // -1

Obviamente, devuelve -1 porque no puede encontrar una coincidencia para la "ABC" dentro de la variable de array : "ABC" está contenido en una sub-matriz que es un nivel más profundo. es decir, está contenido en array[0] , específicamente en array[0][0] .

Si lee la página de MDN para Array.indexOf() , notará que intentará encontrar el elemento que coincida con el parámetro en la matriz. Está buscando una cadena en una matriz de matrices de cadenas.

Es por eso que intentar buscar ctList[0] funcionaría, ya que es una coincidencia de identidad:

 // returns -1 : correct string value, not an object equality, though console.log(array.indexOf(['ABC'])); // returns 0: same object that's being looked up console.log(array.indexOf(array[0]));

Solución

Entonces, es difícil saber a partir de su ejemplo lo que realmente está tratando de hacer, pero parece que realmente desea buscar la posición de la matriz que contiene su cadena, y no la posición de la cadena. Si ese es el caso, y siempre hay un solo elemento por subarreglo, esto funcionaría para mi ejemplo:

 array.map(subarray => subarray[0]).indexOf('ABC'); // 0: YAY!

O para tu caso:

 ctList.map(subarray => subarray[0]).indexOf(ai);
about 4 years ago · Juan Pablo Isaza Denunciar

0

Intente agregar flat() después de getValues():

 function getAgent(ai) { var ss = SpreadsheetApp.openByUrl(url); var ws = ss.getSheetByName("Updated"); var ctList = ws.getRange('A2:A17').getValues().flat();//added flat var position = ctList.indexOf(ai); return position; }

Incluso una sola fila o columna se devuelve como una matriz bidimensional y el índice no funciona realmente con matrices bidimensionales. Puede hacer lo mismo que hace flat() de otras maneras, como con el mapa.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda