Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

154
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda