Estoy tratando de comparar un nombre recuperado de un objeto JSON, con un nombre tal como existe en una hoja de Google. Por mucho que lo intente, no puedo obtener una comparación que arroje un resultado positivo. He intentado:
IndexOf
localeCompare
==
===
Probé key===value String(key)===String(value) y String(key).valueof()=String(value).valueof . También intenté llamar a trim() en todo para asegurarme de que no haya espacios en blanco iniciales/posteriores (no los hay, como se confirmó con una comparación de length() .
Como puede ver en la captura de pantalla, los valores de key y value son exactamente iguales. Cualquier sugerencia será recibida con gratitud. ¡Esto ha retrasado mi proyecto durante días!
Descripción
Esto no es una solución, pero podría ayudar a encontrar el problema. Quizá los personajes de uno u otro no sean lo que piensas. Visualmente se comparan, pero qué pasa si uno tiene una pestaña en lugar de un espacio. Intente esto, enumere los códigos de carácter para cada uno y vea si algún carácter tiene un valor diferente.
He agregado otra opción que elimina el bucle for gracias a @TheMaster
Guión (Opción 1)
function test() { try { let text = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test").getRange("A1").getValue(); console.log(text); let code = []; for( let i=0; i<text.length; i++ ) { code.push(text.charCodeAt(i)) } console.log(code.join()); } catch(err) { console.log(err); } }Guión (Opción 2)
function test() { try { let text = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test").getRange("A1").getValue(); console.log(text); let code = []; [...text].forEach( char => code.push(char.charCodeAt(0)) ); console.log(code.join()); } catch(err) { console.log(err); } }Registro de ejecución
7:57:53 AM Notice Execution started 7:57:56 AM Info Archie White 7:57:56 AM Info 65,114,99,104,105,101,32,87,104,105,116,101 7:57:54 AM Notice Execution completed function compare() { const json = '{"values":[["good","bad","ugly"]]}'; const obj = JSON.parse(json); const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName("Sheet0"); const [hA,...vs] = sh.getDataRange().getDisplayValues(); let matches = []; vs.forEach((r,i) => { r.forEach((c,j) => { let idx = obj.values[0].indexOf(c); if(~idx) { matches.push({row:i+1,col:j+1,index: idx}); } }) }) Logger.log(JSON.stringify(matches)) } Execution log 9:31:50 AM Notice Execution started 9:31:52 AM Info [{"row":1,"col":1,"index":0},{"row":2,"col":1,"index":1},{"row":3,"col":1,"index":2}] 9:31:51 AM Notice Execution completedHoja1:
| COL1 |
|---|
| bueno |
| malo |
| feo |