You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于另一列表子串过滤列表:includes方法失效的解决方法

列表过滤功能实现问题

我尝试用includes方法实现列表过滤,但即便目标列表里存在匹配的子串,对应项也没被移除。以下是我的代码、实际输出和预期输出,求正确实现方法:

function new_eps(){
  var ss = SpreadsheetApp.getActive().getSheetByName('series');
  var new_optts = [['CSI: Vegas\nS2E16 - LEG§§§ccc§§§ddd'],['The Ark\nS1E06 - LEG§§§aaa§§§bbb']];
  var col_g = ss.getRange('G1:G').getValues();
  var col_g_flat = col_g.flat(); // ['CSI: Vegas\nS2E16 - LEG§§§eee§§§fff','The Last of Us\nS1E09 - DUB§§§ggg§§§hhh'];
  var not_match = new_optts.filter(x => !col_g_flat.includes(x[0].substring(0, x[0].indexOf('§§§'))));
  console.log(not_match);
}

实际输出

[ [ 'CSI: Vegas\nS2E16 - LEG§§§ccc§§§ddd' ],
  [ 'The Ark\nS1E06 - LEG§§§aaa§§§bbb' ] ]

预期输出

(因为CSI: Vegas\nS2E16 - LEG是col_g_flat中某一项的子串)

[ [ 'The Ark\nS1E06 - LEG§§§aaa§§§bbb' ] ]

问题原因与解决方法

当前代码用col_g_flat.includes(...)是检查数组中是否有完全等于目标前缀的元素,但实际需求是判断col_g_flat里的项是否包含该前缀子串,逻辑不匹配导致过滤失效。

正确做法是用some方法遍历col_g_flat,检查是否存在元素包含目标前缀:

function new_eps(){
  var ss = SpreadsheetApp.getActive().getSheetByName('series');
  var new_optts = [['CSI: Vegas\nS2E16 - LEG§§§ccc§§§ddd'],['The Ark\nS1E06 - LEG§§§aaa§§§bbb']];
  var col_g = ss.getRange('G1:G').getValues();
  var col_g_flat = col_g.flat(); // ['CSI: Vegas\nS2E16 - LEG§§§eee§§§fff','The Last of Us\nS1E09 - DUB§§§ggg§§§hhh'];
  
  var not_match = new_optts.filter(item => {
    const targetPrefix = item[0].substring(0, item[0].indexOf('§§§'));
    // 检查col_g_flat中是否有元素包含目标前缀
    const hasMatchingItem = col_g_flat.some(gItem => gItem.includes(targetPrefix));
    // 返回不匹配的项
    return !hasMatchingItem;
  });
  
  console.log(not_match);
}

核心说明:

  • Array.prototype.includes():判断数组是否存在完全等于目标值的元素,不支持子串匹配;
  • Array.prototype.some():遍历数组,只要有一个元素满足gItem.includes(targetPrefix)(即包含目标子串),就返回true,正好符合需求。

内容的提问来源于stack exchange,提问作者Digital Farmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:20:22