如何筛选并按与目标数组的匹配值数量降序排序二维数组?
按匹配元素数量排序筛选后的数组
原始数据
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
相关产品推荐
相关产品推荐

