Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

142
Views
¿Mejorar la eficiencia de agregar una columna a una matriz en un bucle?

Así que escribí un código que va a la identificación de un libro basado en un "diccionario" y toma los datos de todas las hojas de ese libro después de la segunda hoja. Luego, esos datos se agregan en una sola matriz. Mi pregunta se centra en la idea de mejorar el ciclo for en la instrucción if. Eso es agregar el "nombre del proveedor" al frente del subarreglo que representa una fila en la hoja/datos. Me dijeron que esto es ineficiente ya que el código tiene que pasar por cada subarreglo y agregar un valor.

¿Hay una manera más eficiente de hacer esto? Lo hice de esta manera porque estoy copiando los valores de un rango que se almacenan como una matriz de matrices. Entonces, para agregar datos, tengo que volver a acceder a los subarreglos. ¿Es posible agregar los nuevos datos (nombre del proveedor) al mismo tiempo que se copian los valores? ¿Sería esto más eficiente? Se recomendó usar una función de flecha, sin embargo, no estoy familiarizado con su uso.

 function aggregate() { var combinedData = [] var idArray = { "suppliername":"id", }; for (var supplierName in idArray){ var sBook = SpreadsheetApp.openById(idArray[supplierName]); var sheets = sBook.getSheets(); for (var index = 2; index <sheets.length; index++){ var sheet = sheets[index]; var dataLength = sheet.getRange("E5:E").getValues().filter(String).length; if(dataLength != 0){ var dataRange = sheet.getRange(5,2,dataLength,14); var dataValues = dataRange.getValues(); for (row in dataValues) { dataValues[row].unshift(supplierName); }; combinedData = combinedData.concat(dataValues); }; }; }; var dataLength = combinedData.length; const dSheet = SpreadsheetApp.openById("id").getSheets()[0]; dSheet.getRange(2,1,dSheet.getMaxRows(),dSheet.getMaxColumns()).clearContent(); var dRange = dSheet.getRange(2,1,dataLength,15); dRange.setValues(combinedData); };
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

En su guión, ¿qué tal la siguiente modificación?

De:

 for (row in dataValues) { dataValues[row].unshift(supplierName); }; combinedData = combinedData.concat(dataValues);

A:

 combinedData = combinedData.concat(dataValues.map(e => [supplierName].concat(e)));

o

 combinedData = [...combinedData, ...dataValues.map(e => [supplierName, ...e])];

Referencias:

  • mapa()
  • Difundir sintaxis
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!