将 map() 限制为仅 运行 在由范围组成的数组中的 headers 列表中
Restrict map() to only run on a list of headers in an array made from a range
我想将地图限制为仅包含列表 headers
中范围内的那些列,列表 headers
是 v[0]
的子集,以便仅列出范围内列中的值headers
中的内容已更改。
function test() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName('Elements');
var rng = sht.getDataRange();
var v = rng.getValues();
var headers = ['Id', 'Label'];
//headers is a subset of v[0]
//This will work for `all` values of the values
//values = v.map(x => x.map(y => y==("Networking - 1") ? 1: y));
values = v.map(x => x.map(y => y== cols.includes(y)==true && y=="Networking - 1" ? 1: y))
var sht2 = ss.getSheetByName('AAA');
sht2.getRange(1,1, v.length, v[0].length).setValues(v);
}
解释:
第一步是获取headers
出现的列索引。为此,您可以将 indexOf 应用于数据 v
的第一行,即 headers 行:
v[0].indexOf(headers[0])
v[0].indexOf(headers[1])
下一步是使用 map 只获取这些列:
v.map(d=>[d[v[0].indexOf(headers[0])],d[v[0].indexOf(headers[1])]]);
解决方案:
function test() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName('Elements');
var rng = sht.getDataRange();
var v = rng.getValues();
var headers = ['Id', 'Label'];
//headers is a subset of v[0]
v = v.map(d=>[d[v[0].indexOf(headers[0])],d[v[0].indexOf(headers[1])]]); // new code
//This will work for `all` values of the values
//values = v.map(x => x.map(y => y==("Networking - 1") ? 1: y));
values = v.map(x => x.map(y => y== cols.includes(y)==true && y=="Networking - 1" ? 1: y))
var sht2 = ss.getSheetByName('AAA');
sht2.getRange(1,1, v.length, v[0].length).setValues(v);
}
我想将地图限制为仅包含列表 headers
中范围内的那些列,列表 headers
是 v[0]
的子集,以便仅列出范围内列中的值headers
中的内容已更改。
function test() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName('Elements');
var rng = sht.getDataRange();
var v = rng.getValues();
var headers = ['Id', 'Label'];
//headers is a subset of v[0]
//This will work for `all` values of the values
//values = v.map(x => x.map(y => y==("Networking - 1") ? 1: y));
values = v.map(x => x.map(y => y== cols.includes(y)==true && y=="Networking - 1" ? 1: y))
var sht2 = ss.getSheetByName('AAA');
sht2.getRange(1,1, v.length, v[0].length).setValues(v);
}
解释:
第一步是获取
headers
出现的列索引。为此,您可以将 indexOf 应用于数据v
的第一行,即 headers 行:v[0].indexOf(headers[0]) v[0].indexOf(headers[1])
下一步是使用 map 只获取这些列:
v.map(d=>[d[v[0].indexOf(headers[0])],d[v[0].indexOf(headers[1])]]);
解决方案:
function test() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName('Elements');
var rng = sht.getDataRange();
var v = rng.getValues();
var headers = ['Id', 'Label'];
//headers is a subset of v[0]
v = v.map(d=>[d[v[0].indexOf(headers[0])],d[v[0].indexOf(headers[1])]]); // new code
//This will work for `all` values of the values
//values = v.map(x => x.map(y => y==("Networking - 1") ? 1: y));
values = v.map(x => x.map(y => y== cols.includes(y)==true && y=="Networking - 1" ? 1: y))
var sht2 = ss.getSheetByName('AAA');
sht2.getRange(1,1, v.length, v[0].length).setValues(v);
}