JavaScript/Google Script二维数组按列排序并将重复项移至顶部
解决方案
要实现将指定列重复项移至顶部,同时保持同组内的排序顺序,你可以先统计目标列值的出现频率,再在排序函数中优先按频率降序排序,频率相同的情况下沿用原有的localeCompare逻辑。
步骤1:统计目标列的出现频率
先遍历数组,用Map记录每个目标列值的出现次数:
// 统计第3列(索引2)的出现次数 const countMap = new Map(); values.forEach(item => { const key = item[2]; countMap.set(key, (countMap.get(key) || 0) + 1); });
步骤2:修改排序逻辑
在排序函数中,先比较两个元素目标列值的出现次数,次数多的排前面;次数相同时,再按原有的字符串排序规则处理:
values.sort((a, b) => { // 优先按出现次数降序 const countDiff = countMap.get(b[2]) - countMap.get(a[2]); if (countDiff !== 0) { return countDiff; } // 次数相同则按原规则排序 return a[2].localeCompare(b[2]); });
验证结果
将上述代码应用到你的原始数组后,得到的结果与你的期望完全一致:
X7 Z2 fake5@fake.com X9 Z5 fake5@fake.com X4 Z6 fake6@fake.com X8 Z6 fake6@fake.com X3 Z7 fake7@fake.com X5 Z7 fake7@fake.com X5 Z1 fake1@fake.com X9 Z8 fake8@fake.com X1 Z9 fake8@fake.com.sn
内容的提问来源于stack exchange,提问作者Einarr
相关产品推荐
相关产品推荐

