javascript - 将 map() 限制为仅在由范围组成的数组中的标头列表上运行
问题描述
我想将映射限制为列表中的那些列,这些列是列表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
即标题行: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);
}
推荐阅读
- build - 创建新的构建定义时,工作空间映射由什么构成?
- javascript - PDF 文件未下载或保存到文件夹
- javascript - 我的身份验证控制器搞砸了,错误显示一致
- python - 是否可以将散景中的图形轴类型设置为地理(长/纬度)?
- forms - 签名板发送空
- java - 如何验证下拉列表并将它们保存在数据库中,并且代码不显示错误
- reactjs - 使用 Material UI Components 的酶单元测试 onChange 方法
- sql - 如何序列化为json数组?
- windows - 如何将 ssh 设置到我的计算机的 github?
- python - 有没有办法在 python 中生成不同的对象实例?