jquery 基于匹配值的数组重新排序

83qze16e  于 2024-01-07  发布在  jQuery
关注(0)|答案(1)|浏览(168)

基于匹配值的数组重新排序
数组顺序应该根据用户搜索而改变,匹配的对象优先

  1. let movies = [{
  2. "MovNameOne": ["comedy", "fun", "2021"]
  3. },
  4. {
  5. "MovNameTwo": ["thriller", "suspense", "2022"]
  6. },
  7. {
  8. "MovNameThree": ["thriller", "comedy", "2021"]
  9. },
  10. {
  11. "MovNameFour": ["action", "mixed", "2000"]
  12. },
  13. {
  14. "MovNameFive": ["fun", "mixed", "2021"]
  15. },
  16. ];
  17. console.log( movies.sort( () => **** );

字符串
如果用户知道电影的确切全名,那么这个匹配的对象应该是第一位的,用户可以根据随机关键字搜索

flvtvl50

flvtvl501#

为此,您可以使用字符串之间的Levenshtein距离并相应地对它们进行排序。
source code for Leventshtein distance taken from here
Levenshtein距离维基百科

  1. const levenshteinDistance = (s, t) => {
  2. if (!s.length) return t.length;
  3. if (!t.length) return s.length;
  4. const arr = [];
  5. for (let i = 0; i <= t.length; i++) {
  6. arr[i] = [i];
  7. for (let j = 1; j <= s.length; j++) {
  8. arr[i][j] =
  9. i === 0
  10. ? j
  11. : Math.min(
  12. arr[i - 1][j] + 1,
  13. arr[i][j - 1] + 1,
  14. arr[i - 1][j - 1] + (s[j - 1] === t[i - 1] ? 0 : 1)
  15. );
  16. }
  17. }
  18. return arr[t.length][s.length];
  19. };
  20. let movies = [{
  21. "MovNameOne": ["comedy", "fun", "2021"]
  22. },
  23. {
  24. "MovNameTwo": ["thriller", "suspense", "2022"]
  25. },
  26. {
  27. "MovNameThree": ["thriller", "comedy", "2021"]
  28. },
  29. {
  30. "MovNameFour": ["action", "mixed", "2000"]
  31. },
  32. {
  33. "MovNameFive": ["fun", "mixed", "2021"]
  34. },
  35. ];
  36. // a series of test input to check the function
  37. let testInputs = ["MovNameF", "MovN", "MovNameOne", "MovNameFour"];
  38. testInputs.forEach(inp => {
  39. // if levenshtein distance between input and element a is greater than input and element b then sort a after be else sort b after a
  40. // > 0 means sort a after b
  41. // < 0 means sort b after a
  42. console.log(inp, movies.sort((a, b) => levenshteinDistance(inp, Object.keys(a)[0]) > levenshteinDistance(inp, Object.keys(b)[0]) ? 1 : -1))
  43. })

字符串
您可以在电影类型/关键字上使用相同的逻辑对它们进行相应的排序

展开查看全部

相关问题