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

我对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


肥皂起泡泡
浏览 135回答 1
1回答

烙印99

您可以通过检查值并使用&nbsp;Array#filter&nbsp;和&nbsp;Array#some&nbsp;进行排除。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]],&nbsp; &nbsp; toExclude = [3, 'red', 'door', 'party', ''],&nbsp; &nbsp; result = data.filter(a =>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; !a.some(v =>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; toExclude.some(w => v === w || w && typeof v === 'string' && v.includes(w))&nbsp; &nbsp; &nbsp; &nbsp; )&nbsp; &nbsp; );console.log(result);.as-console-wrapper { max-height: 100% !important; top: 0; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript