【发布时间】:2021-10-03 04:40:35
【问题描述】:
我有一个歌曲列表。每首歌曲都有一个演奏该歌曲所需所有人的名单。
例如
Song1 | Jess | Julia | Mandy | Fred | Simon |
Song2 | Jess | Julia | | Fred | Simon |
Song3 | | Julia | | Fred | Simon |
然后我有一个在场人员的列表。
例如
Jess | Julia | Fred | Simon
我想将出现的人员列表与歌曲列表进行比较,以便我们知道可以演奏哪些歌曲。
如果我们比较这两个示例,我们知道可以执行 Song2 和 Song3 但不能执行 Song1。 Song2 因为 Jess、Julia、Fred 和 Simon 在场。 Song3 因为 Julia、Fred、Simon 在场(Jess 在场但不需要)。 由于 Mandy 不存在,因此不应返回 Song1。
我希望返回第一列中的歌曲名称。
到目前为止,我有类似的东西,但我知道它不对:
=IF(REGEXMATCH(A1:1, B2:E2), A2, "Nope")
其中 A1:1 是在场人员所在的行,B2:E2 是演唱歌曲所需的人员。 A2 是歌曲的标题。
我最初尝试过:
=IF(A1:1=B2:E2, A2, "Nope")
但知道这是行不通的,因为它正在比较精确匹配。
谢谢。
编辑:
如果我把它写成代码,它可能是这样的。
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.forEach((song) => {
let present = true
song.forEach((singer) => {
if (!singers.includes(singer)) {
present = false
}
})
if (present) {
songsThatCanBePerformed.push(song)
}
})
console.log(songsThatCanBePerformed)
【问题讨论】:
-
只有几个歌手(如示例中所示)还是可能的歌手列表很长?如果是的话,现在 lobg?
-
目前的表演者名单会有 10 到 16 个不同的名字。每首歌曲将有 10 到 16 位不同的表演者。
-
vb 解决方案是否可行(尽管您有 google sheet 标签)?
-
感谢您的回复。实际上,Google Sheets 也支持脚本,这让我记忆犹新。我能够解决我的问题。
-
嗯...好的。当时我还在考虑解决方案“可能”需要多么花哨和适应性强。但后来我发现这可以通过一个公式来完成,该公式实际上可以适应数据结构中可能发生的变化(见下文)。
标签: google-apps-script google-sheets google-sheets-formula formula