如何从数据数组中排除空元素?
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()
,它还将在您的数组中包含那些“”字符。
示例:
在这里,我在 E1 和 F1:
单元格中添加了 space 个字符
这里是data
使用map函数后的值:
如果我删除单元格 E1 和 F1 的值,数据输出为:
如果 header 下方的值与 header 中的列数重叠,也可能出现空值。
示例:
输出:
解法:
而不是使用 getDataRange()
,明确定义您为 header 使用的范围。您可以使用 getRange(row, column, numRows, numColumns)
或 getRange(a1Notation)
.
参考:
我一直在用 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()
,它还将在您的数组中包含那些“”字符。
示例:
在这里,我在 E1 和 F1:
单元格中添加了 space 个字符这里是data
使用map函数后的值:
如果我删除单元格 E1 和 F1 的值,数据输出为:
如果 header 下方的值与 header 中的列数重叠,也可能出现空值。
示例:
输出:
解法:
而不是使用 getDataRange()
,明确定义您为 header 使用的范围。您可以使用 getRange(row, column, numRows, numColumns)
或 getRange(a1Notation)
.