为了账号安全,请及时绑定邮箱和手机立即绑定

使用“广泛匹配”式过滤方法,在 Google Apps 脚本中基于另一个数组过滤数组

使用“广泛匹配”式过滤方法,在 Google Apps 脚本中基于另一个数组过滤数组

肥皂起泡泡 2022-08-18 10:33:47
我对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; }


查看完整回答
反对 回复 2022-08-18
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信