用户:RedDragon/Test:修订间差异
来自Rizline中文维基
更多操作
小 |
小 |
||
| 第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">${ | 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 | 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() : '') | |||
if (song.aliases && song.aliases.length > 0) { | |||
song.aliases.forEach(function (alias) { | |||
maxScore = Math.max(maxScore, getMatchScore(searchText, alias.toLowerCase())) | |||
}) | |||
} | |||
return { | return { | ||
song: song, | song: song, | ||
score: | score: maxScore | ||
} | } | ||
}).filter(function (result) { | }).filter(function (result) { | ||
// 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 >= | 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的版本