不敏感且不完全匹配的字符串搜索数组

时间:2018-08-03 13:38:37

标签: google-apps-script google-sheets

  

注意:我对原始问题进行了一些更改,因为我的问题不是字符串中的逗号。

我有一个正在研究的函数,用于从包含要搜索的字符串的新数组中排除单元格值。我这样做是为了汇总.setHiddenValues的列表,因为.setVisibleValues尚不受支持/实现。

为清楚起见,这是我的要求:

当前正在工作:

  • 能够处理数字和字符串
  • 可以搜索小写和大写。 visibleValueStr是用户输入的,因此不能太敏感。
  • colValueArr中可能包含带逗号的字符串。

仍在努力:

  • visibleValueStr可以是单个值或数组。
  • 区分大小写(“苹果”与“苹果”匹配)
  • 不完全匹配(“苹果”匹配“苹果和香蕉”)

在上述满足/未满足条件下,这是我当前拥有的功能:

function getHiddenValueArray(colValueArr,visibleValueArr){
  var flatUniqArr = colValueArr.map(function(e){return e[0].toString();})
    .filter(function(e,i,a){
      return (a.indexOf(e.toString())==i && visibleValueArr.indexOf(e.toString()) == -1);
    })
  return flatUniqArr;
}

请让我知道我还需要什么其他信息。在我继续进行研究的同时,我将更新此问题。

评论说明:

用户以HTML格式输入输入,并且变量以visibleValueArr的形式传递。

使用Logger.log(visibleValueArr)时。

[apple, banana]

使用Logger.log(colValueArr)时。

[[Apple],[apple][apple][apple and banana],[apple],[banana, and apple],
  [apple, and banana],[orange],[orange, and banana],[kiwi],[kiwi, and orange],
  [strawberry]]

所以当我使用时:

SpreadsheetApp.newFilterCriteria().setHiddenValues(newArray).build();

newArray应该是隐藏值。在这种情况下,应为:

  • 橙色
  • 猕猴桃
  • 猕猴桃和橙色
  • 草莓

基本上任何不包含visibleValueArr的内容。

相反,它返回所有值,将它们全部隐藏。

当我使用[Apple, Banana]时,“ Apple”和“ Banana”值应按原样保留在newArray中,但不包括“ Apple and Banana”和“ Apple and Banana”“

此外,我还想了解e,i,afunction(e,i,a)的含义。我正在尝试在不同的地方应用.toLowerCase(),以查看是否可以解决部分问题,但是我不确定该在哪里进行。

1 个答案:

答案 0 :(得分:2)

问题:

  • 区分大小写(“苹果”与“苹果”匹配)
  • 不完全匹配(“苹果”匹配“苹果和香蕉”)

解决方案:

  • 使用不区分大小写的正则表达式搜索

修改后的脚本:

<% @training_resource.users.each do |user| %>
  <tr>
    <td><%= user.full_name %></td>

    <!-- If you want to display all the training_resources of the user and their statuses -->
    <td><%= user.training_resources.map(&:name).join(', ') %></td>
    <td><%= user.user_training_resources.map(&:status).join(', ')</td>

    <td class="table-actions">
      <!-- Assuming your path is something like '/admin/training_resources/:id/users/:user_id' -->
      <%= link_to 'Delete', admin_user_training_resource_path(@training_resource, user), method: :delete, data: { confirm: 'Are you sure you want to delete this Training resource?' }, class: 'btn btn-danger btn-sm' %>
    </td>
  </tr>
<% end %>

参考文献:

相关问题