打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

用户:RedDragon/Test:修订间差异

来自Rizline中文维基
RedDragon
RedDragon留言 | 贡献 (撤销RedDragon讨论)的修订版本5738
第37行: 第37行:
         songlist.forEach(function (song) {
         songlist.forEach(function (song) {
             const li = document.createElement('li')
             const li = document.createElement('li')
             li.innerHTML = `<span class="song-title">${song.title}</span>: <span class="aliases">${song.aliases.join('、')}</span>`
            let aliasText = song.aliases && song.aliases.length > 0 ? song.aliases.join('、') : '<span style="color:#888">无别名</span>'
             li.innerHTML = `<span class="song-title">${song.title || ''}</span>: <span class="aliases">${aliasText}</span>`
             container.appendChild(li)
             container.appendChild(li)
         })
         })
    }
    //计算匹配度,输入的每个字符只能在目标字符串中匹配一次,必须按顺序,每匹配一个字符加1分
    function getMatchScore(input, target) {
        if (!input || !target) return 0
        input = input.toLowerCase()
        target = target.toLowerCase()
        if (input === target) return 100
        let score = 0
        let pos = 0
        for (let i = 0; i < input.length; i++) {
            let found = false
            for (let j = pos; j < target.length; j++) {
                if (input[i] === target[j]) {
                    score += 1
                    pos = j + 1
                    found = true
                    break
                }
            }
            if (!found) break
        }
        return score
     }
     }


第45行: 第71行:
         const searchText = document.getElementById('alias-input').value.trim().toLowerCase()
         const searchText = document.getElementById('alias-input').value.trim().toLowerCase()
         const resultsContainer = document.getElementById('alias-results')
         const resultsContainer = document.getElementById('alias-results')
        const resc = Number(document.getElementById('score-filter').value) || 2


         if (!searchText) {
         if (!searchText) {
             resultsContainer.innerHTML = '<div class="no-results">输入关键词进行搜索</div>'
             resultsContainer.innerHTML = '<div>输入关键词进行搜索</div>'
             return
             return
         }
         }
       
 
        // 计算匹配度并排序
         const results = songlist.map(function (song) {
         const results = songlist.map(function (song) {
             // 检查标题匹配
             let maxScore = getMatchScore(searchText, song.title ? song.title.toLowerCase() : '')
            const titleMatch = song.title.toLowerCase().includes(searchText)
             if (song.aliases && song.aliases.length > 0) {
             // 检查别名匹配
                song.aliases.forEach(function (alias) {
            const aliasMatches = song.aliases.filter(function (alias) {
                    maxScore = Math.max(maxScore, getMatchScore(searchText, alias.toLowerCase()))
                return alias.toLowerCase().includes(searchText)
                })
            })
             }
             // 计算权重
            let score = 0
            if (titleMatch) score += 2  // 标题权重
            score += aliasMatches.length * 3  // 别名权重
             return {
             return {
                 song: song,
                 song: song,
                 score: score
                 score: maxScore
             }
             }
         }).filter(function (result) {
         }).filter(function (result) {
            // const resc = 2
             // if (result.score >= resc) {
             // if (result.score >= resc) {
             //    console.log(result.song.title + ": " + result.score)
             //    console.log(result.song.title + ": " + result.score)
             // }
             // }
             return result.score >= 2  // 过滤掉不匹配的
             return result.score >= resc
         }).sort(function (a, b) {
         }).sort(function (a, b) {
             return b.score - a.score // 按匹配度降序排序
             return b.score - a.score
         })
         })



2025年9月12日 (五) 20:33的版本

搜索结果:

别名列表: