gpt4 book ai didi

javascript - 如何使用备用拼写选项匹配两个数组?

转载 作者:行者123 更新时间:2023-12-05 04:19:17 24 4
gpt4 key购买 nike

我有两个数组,我想找到它们的交集,但是我还有一个备用拼写字段,它应该作为一个额外的匹配模式。

这里是流派数组的例子

const genres = 
{ id: 20, name: 'Hip-Hop', alt_spelling: [ 'Hip Hop', 'HipHop' ] },
{ id: 21, name: 'House', alt_spelling: [ 'Deep House', 'Acid' ]},
{ id: 22, name: 'Alternative', alt_spelling: [] },
{ id: 23, name: 'Dance', alt_spelling: ["Techno"] }

const genreNames = genres.map((genre) => genre.name.toLowerCase())

const tags = ["Alternative", "Deep House", "Techno"]

目前,以下代码块有效并将返回 ["Alternative"],但我希望它也匹配 alt_spellings,因此应返回对象 ID 但匹配 alt_spelling,因此应返回 [21, 22 , 23],因为 Deep House 和 Techno 会匹配替代拼写。

  const matchedGenres = tags?.filter((element) =>
genreNames.includes(element.toLowerCase()),
)

这里的任何帮助都会很棒 :)谢谢

最佳答案

你可以这样做:

const genres = [{ id: 20, name: 'Hip-Hop', alt_spelling: ['Hip Hop', 'HipHop'] },{ id: 21, name: 'House', alt_spelling: ['Deep House', 'Acid'] },{ id: 22, name: 'Alternative', alt_spelling: [] },{ id: 23, name: 'Dance', alt_spelling: ['Techno'] },]

const genresHash = genres.reduce(
(acc, { id, name, alt_spelling }) => ((acc[id] ??= [name, ...alt_spelling]), acc),
{}
)

const tags = ['Alternative', 'Deep House', 'Techno']

const matchedGenres = genres.filter((genre) =>
genresHash[genre.id].some((name) =>
tags.some((tag) => name.localeCompare(tag, undefined, { sensitivity: 'base' }) === 0)
)
)

console.log(matchedGenres)

关于javascript - 如何使用备用拼写选项匹配两个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74856199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com