Если ваш префикс path
всегда один и тот же (как, кажется, с /la-naction
, то вы можете сделать свой собственный подсчет очков (через startsWith
) на основе длины совпадающей строкиа затем sort-by desc
(наибольшее количество баллов) ... и наберите лучший результат:
const url = '/economia/finanzas/moodys-coloca-calificaciones-de-riesgo-de-costa/JZF24QAQHBBFPLJQL5VZJPKCZA/story/'
const sites = [{"_id":"/la-nacion/economia"},{"_id":"/la-nacion"},{"_id":"/la-nacion/economia/finanzas"},{"_id":"/la-nacion/economia/moodys"}]
const getBestMatch = (s, u, p = '/la-nacion') => { // <-- default prefix
const topScored = s.map(x =>
(Object.assign(x, {
score: ((`${p}${u}`).startsWith(x._id) ? x._id.length : 0)}), x)
).sort((a, b) => b.score - a.score)[0] // <-- sort, get the highest score
return topScored.score > 0 ? topScored._id : undefined
}
console.log(getBestMatch(sites, url))
Нет необходимости в Лодаше и т. Д. Просто map
добавьте счет, а затем sort
действительно.