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

如何通过表格公式筛选现有人员可表演的歌曲 解决字符串行匹配问题

解决方案

电子表格(Excel/Google Sheets/WPS表格)实现

核心判断逻辑:某首歌所需的所有非空参演人员,全部存在于到场人员列表中,即可表演
假设你的表格结构如下:

  • 第1行存储到场人员:B1到E1分别为Jess、Julia、Fred、Simon
  • 第2行起存储歌曲数据:A列为歌曲名称,B列到E列为对应歌曲需要的参演人员,空单元格代表不需要该人员

单首歌判断公式

在对应歌曲行的空白单元格输入以下公式,即可返回当前歌曲是否可表演:

=IF(SUMPRODUCT(--(NOT(ISBLANK(B2:E2)) * ISNA(MATCH(B2:E2, $B$1:$E$1, 0)))) = 0, A2, "Nope")

公式逻辑说明:

  • MATCH(B2:E2, $B$1:$E$1, 0):逐个匹配当前歌曲的所需人员是否在到场列表中,匹配失败返回#N/A
  • ISNA(...):将匹配失败的结果转为布尔值TRUE,匹配成功转为FALSE
  • NOT(ISBLANK(B2:E2)):排除歌曲所需人员中的空单元格,空值无需参与匹配
  • 两者相乘后,仅「非空+未到场」的情况会得到1,其余情况均为0
  • SUMPRODUCT求和后如果为0,说明所有需要的人员都已到场,返回歌曲名,否则返回Nope

批量返回所有可表演歌曲

使用支持溢出函数的新版Excel/Google Sheets,可直接用以下公式一次性输出所有符合要求的歌曲名:

=FILTER(A2:A, BYROW(B2:E, LAMBDA(row, SUMPRODUCT(--(NOT(ISBLANK(row)) * ISNA(MATCH(row, $B$1:$E$1, 0)))) = 0))

代码实现

你提供的代码逻辑正确,仅存在变量名书写错误,修正后适配空值场景的代码如下:

const presentSingers = ['Julia', 'Mandy', 'Jess', 'Fred']
const song1 = ['Julia', 'Mandy', ''] // 空字符串对应表格里的空单元格
const song2 = ['Julia', 'Mandy', 'Jess', 'Fred']
const song3 = ['Julia', 'Rachel', 'Mandy']
const allSongs = [song1, song2, song3]

const songsThatCanBePerformed = allSongs.filter(song => {
  // 过滤空值,避免将空白单元格当成需要的人员
  const requiredSingers = song.filter(singer => singer?.trim())
  // 判断所有需要的人员都已到场
  return requiredSingers.every(singer => presentSingers.includes(singer))
})

console.log(songsThatCanBePerformed)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:57:04