我对 JavaScript 还很陌生,可能需要一些帮助来解决以下问题:即,使用数组作为我想要从数据中删除/过滤的项目的输入来过滤 Google Apps 脚本中的数据。在@Cooper的帮助下,我弄清楚了如何正确地做到这一点,他在以下线程中提供了正确的答案:
Filtering an array based on another Array in Google Apps Script
但是,这一点很重要,我不仅想过滤完全匹配的数据,还想过滤广泛匹配的数据。下面的代码确实正确过滤了我的数据,但仅排除完全匹配。例如,如果我的数组 toExclude
包含 'red',则所有包含单词 'red' 的行都会被排除。那是好消息。但包含“红酒”等内容的行仍保留在我的数据集中。这就是我想要改变的。
我正在处理的数据如下所示,下面指定了我想要过滤/删除的一些示例项目:
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 的行(仅当发生完全匹配时)。我怎样才能改变这一点?我知道单个输入是可能的,但无法将此逻辑应用于上面这个相当复杂的代码。
感谢您的帮助!
最佳答案
您可以通过检查值来排除并使用 Array#filter
和 Array#some
.
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]],
toExclude = [3, 'red', 'door', 'party', ''],
result = data.filter(a =>
!a.some(v =>
toExclude.some(w => v === w || w && typeof v === 'string' && v.includes(w))
)
);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 使用 'broad match' 样式的过滤方法根据 Google Apps 脚本中的另一个数组过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61834513/