如何从数据数组中排除空元素?

How can I exclude null elements from data array?

我一直在用 Yuri 的 做一道题,但发现自己处在一个新的环境中,我对这个方法的每一步都不太了解:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var header = sheet.getDataRange().getValues()[0];

  var data = [
    ["ID","Variação","Nome Site","Obs"],
    [11602,185,"Camisa Teste","Teste da Observação"]
  ]

  var indexes = header.map(x => data[0].indexOf(x));
  data = data.map(x => indexes.map(i => x.slice()[0] = x[i]));

  sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
}

结果如下:

let result = [
           ["ID","Variação","Nome Site","Obs", "", ""],
           [11602,185,"Camisa Teste","Teste da Observação", "", ""]
         ]

现在,这是 returning data 空值。我怎样才能让它 return 只映射数组元素? 因此,不是将数组长度设置为 6,而是只有 4。 预期结果:

let expectedResult = [
           ["ID","Variação","Nome Site","Obs"],
           [11602,185,"Camisa Teste","Teste da Observação"]
         ]

谢谢!

一种方法是过滤内部值:

let result = [
  ["ID", "Variação", "Nome Site", "Obs", "", ""],
  [11602, 185, "Camisa Teste", "Teste da Observação", "", ""]
]
result = result.map(x => x.filter(y => y))
console.log(result)

删除空值

function test() {
Logger.log(JSON.stringify([1,2,3,null,4,null,5,''].filter(e => e)))
}

Execution log
7:48:37 PM  Notice  Execution started
7:48:37 PM  Info    [1,2,3,4,5]
7:48:38 PM  Notice  Execution completed

数组中有空元素的一个可能原因是 header 旁边的单元格中有 " " 或 space 字符。由于您使用的是 getDataRange(),它还将在您的数组中包含那些“”字符。

示例:

在这里,我在 E1F1:

单元格中添加了 space 个字符

这里是data使用map函数后的值:

如果我删除单元格 E1F1 的值,数据输出为:

如果 header 下方的值与 header 中的列数重叠,也可能出现空值。

示例:

输出:

解法:

而不是使用 getDataRange(),明确定义您为 header 使用的范围。您可以使用 getRange(row, column, numRows, numColumns)getRange(a1Notation).

参考: