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

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

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

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 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