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

193
Vistas
¿Cómo comparar estos dos arreglos por la forma en que están construidos usando GAS?

Los values de la matriz 1 se construyen obteniendo los valores de los rangos asignados a través de una lista de rangos y Arra2 es una fila obtenida de otro rango. Veo que las estructuras de estos arreglos no son similares y no es posible compararlos tal como son, pero ¿qué puedo cambiar en el código para que la comparación funcione?

Así es como se ven los datos: ingrese la descripción de la imagen aquí

Este es el código por el que estoy siendo humillado:

 function saveEditedItem() { const ssCadProd = SpreadsheetApp.getActiveSpreadsheet(); const sheetCadProd = ssCadProd.getSheetByName('Cadastro de Produto'); const ref = sheetCadProd.getRange('B5').getValue(); const variac = sheetCadProd.getRange('K5').getValue(); //MAPS DATA RANGES const dataRng = [ "B5", "D5", "G5", "I5", "K5", ]; const rngList = sheetCadProd.getRangeList(dataRng).getRanges(); //THROW MAPPED DATA INTO AN ARRAY let values = []; for (let i = 0; i < rngList.length; i++) { values = [].concat(values, rngList[i].getValue()); } Logger.log('Values: ' + values) Logger.log('Values Length: ' + values.length) //GETS THE ITEM WITH THE SAME REF AND VARIAC const produtosDB = sheetCadProd.getRange(10, 1, 3, 5).getValues(); let prodSelecDB = []; for (let a = 0; a < produtosDB.length; a++) { if (produtosDB[a][0] == ref && produtosDB[a][4] == variac) { prodSelecDB.push(produtosDB[a]) } } Logger.log('prodSelecDB: ' + prodSelecDB) Logger.log('prodSelecDB Length: ' + prodSelecDB.length) Logger.log('Stringified Values: ' + JSON.stringify(values)) Logger.log('Stringified ProdSelecDB: ' + JSON.stringify(prodSelecDB)) //COMPARES Values' DATA WITH ProdSelecDB's var duplicate = false; for (var x = 0; x < values.length; x++) { for (var j = 0; j < prodSelecDB.length; j++) { if (JSON.stringify(values[x]) == JSON.stringify(prodSelecDB[j])) { duplicate = true; break; } } } Logger.log('Are they the same? ' + duplicate) }

Estos son los registros: ingrese la descripción de la imagen aquí

Aquí está el enlace al archivo, en caso de que tenga ganas de participar: https://docs.google.com/spreadsheets/d/1v1N6rHP7qIheDDUkcQiNfEZ4rmjrguBHYoyWuTuWwKw/edit?usp=sharing

¡Aprecie su tiempo, como siempre!

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

0

Creo que podrías buscar coincidencias de fila completa de esta manera

 function compare() { const ss = SpreadsheetApp.getActive(); const sh0 = ss.getSheetByName('Sheet0'); const v0s = sh0.getRange(1,1,1,sh0.getLastColumn()).getDisplayValues().map(r => [r[1],r[3],r[6],r[8],r[10]].join("")); const sh1 = ss.getSheetByName("Sheet1"); const v1s = sh1.getRange(2,1,sh1.getLastRow() - 1,sh1.getLastColumn()).getDisplayValues(); let n = 0; v1s.forEach((r,i) => { let j = r.join(""); let idx = v0s.indexOf(j); if(~idx) { //there is a match and for this example it occurs on row idx + 1 n++; } }) Logger.log('matches: %s',n) } Execution log 2:02:36 PM Notice Execution started 2:02:37 PM Info matches: 1.0 2:02:37 PM Notice Execution completed

Hoja0:

ingrese la descripción de la imagen aquí

Hoja1:

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza Denunciar

0

Me importa la reutilización y puede crear una función personalizada con el script que hice. No sabía dónde ibas a generar ese código, pero hice un console.log() sin embargo, puedes modificarlo cuando lo necesites.

 const ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() function saveEditedItem() { const array1 = getArray1() const array2= getArray2('A11:E11') console.log(compareArr(array1, array2)) return compareArr(array1, array2) } function compareArr(arr1, arr2) { const string1 = JSON.stringify(arr1) const string2 = JSON.stringify(arr2) if(string1 === string2){ return true } else { return false } } function getArray1() { const listRange = ['B5', 'D5', 'G5', 'I5', 'K5'] const rngList = ss.getRangeList(listRange).getRanges() return extractArray(rngList) } function getArray2(range){ const array = ss.getRange(range).getValues() return array[0] } function extractArray(rngList) { let array = []; for (let i = 0; i < rngList.length; i++) { array = [].concat(array, rngList[i].getValue()); } return array }
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