【发布时间】:2020-09-02 04:20:24
【问题描述】:
我对 JavaScript 相当陌生,可能需要一些帮助来解决以下问题:即,使用数组作为我想从数据中删除/过滤的项目的输入来过滤我在 Google Apps 脚本中的数据。如何正确地做到这一点感谢@Cooper的帮助,他在以下线程中提供了正确答案:
Filtering an array based on another Array in Google Apps Script
但是,这很重要,我想过滤我的数据不仅是完全匹配,还要过滤广泛匹配。下面的代码确实正确过滤了我的数据,但只排除了完全匹配。例如,如果我的数组 toExclude 包含 'red',则所有带有单词 'red' 的行都将被排除。那是好消息。但是,例如 'red wine' 的行仍保留在我的数据集中。这就是我想要改变的。
我正在处理的数据看起来像这样,下面指定了一些我想过滤/删除的示例项目:
function main() {
// create some example data.
var data = [ [ 3, 15, 52 ],
[ 'red wine', 18, 64 ],
[ 'blue', 11, 55 ],
[ 'shoes', 9, 18 ],
[ 'car door', 7, 11 ],
[ 50, 34, 30 ],
[ 'house party', 10, 17 ],
[ 'party', 12, 13 ],
[ 'cheap beer', 30, 15 ] ];
// define filtered items.
var toExclude = [ 3, 'red', 'door', 'party', '' ];
// run the filter provided by @Cooper.
var d=0;
for(var i=0;i-d<data.length;i++) {
for(var j=0;j<data[i-d].length;j++) {
if(toExclude.indexOf(data[i-d][j])!=-1) {
data.splice(i-d++,1);//remove the row and increment the delete counter
break;//break out of inner loop since row is deleted
}
}
}
console.log(data);
}
这是我的输出看起来应该是什么样的:
// how the output actually looks.
[ [ 'red wine', 18, 64 ], // supposed to be filtered out since 'red' is included.
[ 'blue', 11, 55 ],
[ 'shoes', 9, 18 ],
[ 'car door', 7, 11 ],
[ 50, 34, 30 ],
[ 'house party', 10, 17 ], // supposed to be filtered out since 'party' is included.
[ 'cheap beer', 30, 15 ] ]
// how it should look.
[[ 'blue', 11, 55 ],
[ 'shoes', 9, 18 ],
[ 'car door', 7, 11 ],
[ 50, 34, 30 ],
[ 'cheap beer', 30, 15 ] ]
有人知道如何解决我的问题吗?我知道问题在于命令的工作方式。具体来说,我检查先前定义的变量 toExclude 是否是我的数据的一部分,因此仅删除输出为 TRUE 的行,这仅在发生完全匹配的情况下。我该如何改变呢?我知道单输入是可能的,但不能将此逻辑应用于上面这个相当复杂的代码。
感谢您的帮助!
【问题讨论】:
-
toExclude中的空字符串需要什么逻辑?空字符串包含在每个项目中,因此听起来您不想将其过滤掉。您是否只想过滤掉与空字符串完全匹配的内容? (但您没有任何第一项是空字符串)
标签: javascript arrays google-apps-script google-sheets filtering