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

263
Vistas
¿Por qué esta función de mapa no devuelve uno de los números, cuando obtiene 1 para restar del uso de GAS?

Obtengo los números en una columna y le resto 1, cuando el valor no está vacío:

 function myFunction(){ const ss = SpreadsheetApp.getActiveSpreadsheet(); const colSettingSheet = ss.getSheetByName('Settings'); let colSettings = colSettingSheet.getRange('D4:E').getValues(); let indexes = colSettings.map(e => e[1] > 0 ? e[1] - 1 : e[1]).filter(e => e != ''); }

Los valores originales:

[[6,7,8,1,,,,14,31,17,30,15,16,34]]

Esto es lo que está devolviendo:

 [5,6,7,13,30,16,29,14,15,33]

...y le falta un 0 entre 7 y 13 y no puedo averiguar por qué.

¡Apreciamos tu entrada!

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

0

esto funciona para mi

 function myFunction() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName('Sheet1'); let s = sh.getRange('D4:E' + sh.getLastRow()).getValues(); Logger.log(s.map(e => e[1] > 0 ? e[1] - 1 : e[1])); }

No necesita el filtro si simplemente elimina los nulos en primer lugar con lastRow

about 4 years ago · Juan Pablo Isaza Denunciar

0

Necesita filtrar undefined , no una cadena vacía.

Y como sugirió Alexey Zelenin, el filter y el map deberían intercambiarse

 let colSettings = [6,0,7,8,1,,,,14,31,17,30,15,16,34].map(a => [0,a]); let indexes = colSettings.filter(e => e !== undefined).map(e => e[1] > 0 ? e[1] - 1 : e[1]); console.log(indexes);
Y dado que el filter elimina automáticamente los elementos vacíos, puede usar filter(Boolean) en su lugar.

[EDITAR] Realmente no necesita recorrer dos veces la matriz con filter y map , puede usar reduce y filtrar en una sola toma:

 let colSettings = [6,0,7,8,1,,,,14,31,17,30,15,16,34].map(a => [0,a]); let indexes = colSettings.reduce((r,a) => ((r[r.length] = a[1] - (a[1] && 1)), r), []); console.log(indexes);

PD Su código original sugiere que el formato de matriz original es diferente al que ha publicado, es más como: [[0,6],[0,7],[0,8],[0,1],,,,[0,14],[0,31],[0,17],[0,30],[0,15],[0,16],[0,34]]

Si la matriz tiene el formato real que ha publicado [[6,7,8,1,,,,14,31,17,30,15,16,34]] el código sería:

 let colSettings = [[6,0,7,8,1,,,,14,31,17,30,15,16,34]]; let indexes = colSettings.map(ar => ar.reduce((r,a) => ((r[r.length] = a - (a && 1)), r), [])); console.log(indexes);

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