javascript - 根据 Google Apps 脚本中的另一个数组过滤数组
问题描述
我对 JavaScript 相当陌生,可能需要一些帮助来解决我在使用 Google Apps 脚本时遇到的问题。
我打算做的是根据一个数组过滤我的数据,该数组是我从特定工作表中的特定单元格中抓取的,其中包含我不想保留在数据中的字符串元素。换句话说,应该从我的工作表中删除包含这些关键字的行。
到目前为止,我已经设法在我的过滤器函数中使用单个字符串元素来做到这一点。
// elements to filter out.
var keys = [['a','b','c']];
// example data.
var data = [['a',1,2],
['c',4,3],
['d',3,4]];
// my approach for a single element which works.
var filterText = "a";
var newData1 = data.filter(function(item) {
return item[0] !== filterText;
});
console.log(newData1); // output: [ [ 'c', 4, 3 ], [ 'd', 3, 4 ] ]
但是,如果我尝试将此逻辑扩展到使用数组过滤数据的情况,我就有麻烦了。我在下面编写了正确检查我的数据但没有返回预期结果的代码。我知道我在这里错过了代码的关键部分,但无法弄清楚它是哪一个。我将代码转了几次,但无论哪种方式都卡住了。
for(var n=0; n<keys[0].length; n++) {
// console.log(keys[0][n]);
var newData2 = data.filter(function(item) {
// console.log(item[0] === keys[0][n]);
return item[0] === keys[0][n];
})
};
console.log(newData2); // output: [ [ 'c', 4, 3 ] ]
希望你们能指出我正确的方向,并帮助我理解我在这里犯错的地方。
谢谢!
解决方案
我会用你所有不需要的键创建一个对象,然后我会用它们来过滤你的数据数组。
const ObjectOfKeys = keys.reduce((acc,rec)=> {
let nextAcc = acc;
nextAcc[rec] = true;
return nextAcc;
},{}};
const filteredData = data.filter(rec => !ObjectKeys[rec[0]])
或者,如果您的键是唯一的,您可以跳过制作对象。
const filterData = data.filter(rec => !keys.includes(rec)) 注意。例如,如果您的密钥是“apple”而 data[0] 是“a”,这将不起作用,因此第一种方法将确保没有这样的情况会导致代码关闭。
推荐阅读
- typescript - TypeScript 是否支持对象类型之间的真正 XOR 联合?
- python - 在 ExpressionWrapper 中结合 Django DateField 和 TimeField 给出 TypeError: expected string or bytes-like object
- javascript - 我想用firebase创建一个react native todo应用程序
- mysql - 使用 vb.net 和 mysql(在线)执行命令时遇到致命错误
- html - 无法使用 pypandoc 将图像从 docx 文件添加到 html 文件
- javascript - 异步函数中的 setState
- workflow - 如何从正在运行的 Snakemake 工作流程中可靠地获取状态信息?
- flutter - Flutter:如何启用通知声音
- testing - Geb - 不起作用 attr。必需(常规测试)
- html - 增量值有效,但不适用于附加的 HTML