提高在循环中向数组添加列的效率?

Improving efficiency of adding a column to an array in a loop?

所以我写了一些代码,根据“字典”转到一本书的 ID,并从第二个 sheet 之后的那本书中的所有 sheet 中获取数据。然后将该数据聚合到一个数组中。我的问题围绕着改进 if 语句中的 for 循环的想法。那就是将“供应商名称”添加到代表 sheet/data 中的一行的子数组的前面。有人告诉我这是低效的,因为代码必须遍历每个子数组并添加一个值。

有没有更有效的方法?我这样做是因为我正在复制存储为数组数组的范围的值。所以要添加数据,我必须重新访问子数组。是否可以在复制值的同时添加新数据(供应商名称)?这样会更有效率吗?推荐使用箭头函数,但是我不熟悉它们的用法

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);
};

在你的脚本中,做如下修改怎么样?

发件人:

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

收件人:

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

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

参考文献: