Saltar al contenido

indexOf devolviendo -1 a pesar de que el objeto está en el array – Javascript en secuencias de comandos de hojas de cálculo de Google

Hola usuario de nuestro sitio, encontramos la solución a lo que buscas, continúa leyendo y la encontrarás más abajo.

Solución:

Cuando recupera valores en Google Apps Script con getValues(), siempre estará tratando con un Javascript 2D array (indexado por fila y luego por columna), incluso si el rango en cuestión es de una columna de ancho. Entonces, en su caso particular, y extendiendo el ejemplo de +RobG, su values array en realidad se verá algo como esto:

[['fred'], ['sam'], ['sam'], ['fred']]

Entonces tendrías que cambiar

var row = values[i];

a

var row = values[i][0];

Aparte, vale la pena señalar que puede usar una función de hoja de cálculo nativa de Sheets para lograr esto (escrito directamente en una celda de hoja de cálculo):

=UNIQUE(Director)

Esto se actualizará dinámicamente a medida que el contenido del rango nombrado Director cambios. Dicho esto, puede haber una buena razón por la que desea utilizar Google Apps Script para esto.

Suena como un problema con GAS y no con JS. Siempre he tenido problemas con obtenerValores(). A pesar de que la documentación dice que es un bidimensional array, no puedes compararlo como esperarías. Aunque si usa una declaración de indexación como values[0][1] obtendrá un tipo de datos básico. La solución (espero que haya una mejor manera) es forzar ese objeto en un Cuerda() y luego separar() vuelve a entrar en un array que puedes usar.

Aquí está el código que yo usaría:

 var column = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("Director");
 var values = column.getValues();
      values = String(values).split(",");
 var myIndex = values.indexOf(myDirector);

Si myDirector está en valores obtendrá un número != -1. Sin embargo, las comas en sus datos causarán problemas. Y esto solo funcionará con matrices 1D.

En tu caso: var row = values[i];hilera es un objeto y no el string que desea comparar. Convierte todos tus valores a una array como tengo arriba y sus operadores de comparación deberían funcionar. (intente imprimir hilera a la consola a ver que dice: Logger.log(row))

Porque estamos trabajando con un 2D array, 2dArray.indexOf("Search Term") debe tener un 1D completo array como término de búsqueda. Si queremos buscar un valor de una sola celda dentro de ese array, debemos especificar en qué fila queremos buscar.

Esto significa que usamos 2dArray[0].indexOf("Search Term") si nuestro término de búsqueda no es un array. Hacer esto especifica que queremos buscar en la primera “fila” en el array.

Si estuviéramos viendo un rango de celdas de 3×3 y quisiéramos buscar en la tercera fila, usaríamos 2dArray[2].indexOf("Search Term")

El siguiente script obtiene la fila actual en la hoja de cálculo y la convierte en un array. Luego usa el indexOf() método para buscar esa fila para "Search Term"

//This function puts the specified row into an array.
//var getRowAsArray = function(theRow) 
function getRowAsArray()

  var ss = SpreadsheetApp.getActiveSpreadsheet();     // Get the current spreadsheet
  var theSheet = ss.getActiveSheet();                 // Get the current working sheet
  var theRow = getCurrentRow();                       // Get the row to be exported
  var theLastColumn = theSheet.getLastColumn();       //Find the last column in the sheet.


  var dataRange = theSheet.getRange(theRow, 1, 1, theLastColumn); //Select the range
  var data = dataRange.getValues();            //Put the whole range into an array
  Logger.log(data);                            //Put the data into the log for checking
  Logger.log(data[0].indexOf("Search Term"));  //2D array so it's necessary to specify which 1D array you want to search in.
  //We are only working with one row so we specify the first array value,
  //which contains all the data from our row

Reseñas y valoraciones del post

Si te gustó nuestro trabajo, tienes el poder dejar un escrito acerca de qué le añadirías a este tutorial.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *