为什么不从工作表列中删除重复项?

Why isn't it removing the duplicates from a Sheets Column?

我正在从一个列中检索值,其中有很多重复项。目标是仅保留唯一值,但我尝试过的方法中 none 有效。

这是我试过的方法:

function listaProdutos() {
  const ssBDCadProd = SpreadsheetApp.openById(CAD_PRODUTO);
  const sheetBDCadProd = ssBDCadProd.getSheetByName('CadProduto');
  let listaProd = sheetBDCadProd.getRange(2, 6, sheetBDCadProd.getLastRow(), 1).getValues();
  let uniques = [...new Set(listaProd)];
  Logger.log('Únicos: ' + uniques);
}

这是另一个尝试:

function listaProdutos() {
  const ssBDCadProd = SpreadsheetApp.openById(CAD_PRODUTO);
  const sheetBDCadProd = ssBDCadProd.getSheetByName('CadProduto');
  let listaProd = sheetBDCadProd.getRange(2, 6, sheetBDCadProd.getLastRow(), 1).getValues();
  let uniques = removeDups(listaProd);
  Logger.log('Únicos: ' + uniques);
}

function removeDups(array) {
  var outArray = [];
  array.sort();
  outArray.push(array[0]);
  for (var n in array) {
    Logger.log(outArray[outArray.length - 1] + '  =  ' + array[n] + ' ?');
    if (outArray[outArray.length - 1] != array[n]) {
      outArray.push(array[n]);
    }
  }
  return outArray;
}

他们都重复记录值,我不确定我是否遗漏了数据如何进入 getValues()

的任何隐含特征

谢谢!

在您的脚本中,let listaProd = sheetBDCadProd.getRange(2, 6, sheetBDCadProd.getLastRow(), 1).getValues(); 是类似于 [["f2"],["f3"],,,] 的二维数组。在这种情况下,[...new Set(listaProd)] 无法删除重复的行。当你想去除重复的行时,下面的修改怎么样?

修改后的脚本:

发件人:

let uniques = [...new Set(listaProd)];

收件人:

let uniques = [...new Set(listaProd.map(([f]) => f))];

这个return的一维数组。当你想return二维数组时,请使用如下修改。

let uniques = [...new Set(listaProd.map(([f]) => f))].map(f => [f]);

注:

  • Logger.log('Únicos: ' + uniques);的情况下,即使uniques是二维数组,也会显示f2,f3,,,,这样的comma-separated值的值。请注意这一点。