我对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
1 回答
烙印99
TA贡献1829条经验 获得超13个赞
您可以通过检查值并使用 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; }
添加回答
举报
0/150
提交
取消