Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

146
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!