You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定模板数组对JavaScript对象数组按匹配度高低排序?

JS按模板数组匹配度排序实现方案

核心思路

  • 先把模板数组转成Set结构,把元素存在性校验的时间复杂度从O(n)降到O(1),数据量大的时候性能提升明显
  • 给每个待排序的对象计算items字段和模板的匹配元素数量
  • 用Array.sort()按匹配数降序排序即可,匹配数相同的场景可以自行补充额外排序规则

完整实现代码

// 参考模板
let template = ['A', 'B', 'C'];
// 待排序数据源
let source = [
   { items: ['B', 'D', 'E'] },
   { items: ['E', 'L', 'Y'] },
   { items: ['G', 'B', 'A'] },
   { items: ['C', 'B', 'A'] }
];

// 模板转Set提升查询效率
const templateSet = new Set(template);

// 执行排序
const sorted = source.sort((a, b) => {
  // 分别计算两个对象的匹配元素数量
  const matchCountA = a.items.filter(item => templateSet.has(item)).length;
  const matchCountB = b.items.filter(item => templateSet.has(item)).length;
  // 降序排列,匹配数越高越靠前
  return matchCountB - matchCountA;
});

额外说明

如果遇到匹配数相同需要进一步排序的场景,比如按items字符串字典序排序,可以扩展排序逻辑:

const sorted = source.sort((a, b) => {
  const matchCountA = a.items.filter(item => templateSet.has(item)).length;
  const matchCountB = b.items.filter(item => templateSet.has(item)).length;
  // 先按匹配数降序,匹配数相同再按items拼接字符串升序
  return matchCountB - matchCountA || a.items.join(',').localeCompare(b.items.join(','));
});

内容的提问来源于stack exchange,提问作者Kheber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:06:09