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

如何筛选并按与目标数组的匹配值数量降序排序二维数组?

按匹配元素数量排序筛选后的数组

原始数据

var first = ['a', 'b', 'c']
var second = [ 
            {'value' : ['a', 'b']},
            {'value' : ['c', 'e']},
            {'value' : ['a', 'c', 'b']},
            {'value' : ['f']}, 
          ]

期望结果

筛选出和first有匹配元素的项后,按匹配元素的数量降序排列:

third:   [ 
            {'value' : ['a', 'c', 'b']},
            {'value' : ['a','b']}, 
            {'value' : ['c', 'e']},
          ] 

现有筛选代码

已经通过以下代码筛选出包含first中至少一个元素的项:

second.filter(item => first.some(num => item.value.includes(num)))

完整实现(筛选+排序)

要实现按匹配数量降序排序,在筛选逻辑后追加排序步骤即可:

// 筛选并排序得到目标数组
const third = second
  .filter(item => first.some(num => item.value.includes(num)))
  .sort((a, b) => {
    // 统计a的value数组与first的匹配元素数量
    const matchCountA = a.value.filter(val => first.includes(val)).length;
    // 统计b的value数组与first的匹配元素数量
    const matchCountB = b.value.filter(val => first.includes(val)).length;
    // 按匹配数量降序排列
    return matchCountB - matchCountA;
  });

console.log(third);

逻辑说明

  • matchCountA和matchCountB分别计算每个项的value数组里,属于first数组的元素个数
  • sort方法返回matchCountB - matchCountA,就能让匹配数量多的项排在前面,实现降序排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:45:01