我对JavaScript相当陌生,可能需要一些帮助来解决以下问题:即,使用数组作为要从数据中删除/过滤的项目的输入,在Google Apps脚本中过滤我的数据。如何正确地做到这一点,多亏了@Cooper的帮助,他们在以下线程中提供了正确的答案:
根据 Google Apps 脚本中的另一个数组过滤数组
但是,这很重要,我不仅想在完全匹配上过滤我的数据,还想在广泛的匹配上过滤我的数据。下面的代码确实可以正确筛选我的数据,但只排除完全匹配。例如,如果我的数组包含“red”,则排除所有带有单词“red”的行。这是个好消息。但是,例如,带有“红酒”的行仍然保留在我的数据集中。这就是我想改变的。toExclude
我正在处理的数据如下所示,下面指定了一些要过滤/删除的示例项:
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 ] ]
有谁知道如何解决我的问题?我知道问题出在命令的工作方式上。具体来说,我检查以前定义的变量是否是我的数据的一部分,从而仅删除输出为TRUE的行,这仅在发生完全匹配时才删除。我该如何改变这一点?我知道使用单个输入是可能的,但不能将此逻辑应用于上面这个相当复杂的代码。toExclude
烙印99
相关分类