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

JavaScript实现先按第二个单词排序,相同则按第一个单词排序

解决方法

你只需要在第17行的排序回调函数里补充当第二个单词比较结果为0时,再按第一个单词排序的逻辑就行啦。

修改后的第17行及逻辑说明

原来的排序逻辑只处理了第二个单词的比较,我们可以先计算第二个单词的对比结果,如果结果是0(说明两个字符串的第二个单词完全相同),就再对第一个单词进行localeCompare比较;否则直接返回第二个单词的对比结果。另外,把split的结果存成变量还能避免重复拆分字符串,提升一点效率:

newLinesw.sort(function(a,b){
  const aWords = a.split(" ");
  const bWords = b.split(" ");
  const secondWordDiff = aWords[1].localeCompare(bWords[1]);
  // 第二个单词相同时,按第一个单词排序
  if (secondWordDiff === 0) {
    return aWords[0].localeCompare(bWords[0]);
  }
  return secondWordDiff;
});

完整的修改后代码

var finalLine=[];
function testing() {
  var logFileSize = 5;
  var logLines = ["a1 9 2 3 1", "g1 act car", "z04 4 7", "ab1 off key dog", "a8 act zoo" ];
  var newLinesw=[];
  var newLinesn=[];
  var wordsarray=[];
  for(var i=0; i< logFileSize; i++) {
    var words = logLines[i].split(" ");
    if(isNaN(words[1]) )
      newLinesw.push(logLines[i]);
    else
      newLinesn.push(logLines[i]);
  }
  // 修改后的排序逻辑
  newLinesw.sort(function(a,b){
    const aWords = a.split(" ");
    const bWords = b.split(" ");
    const secondWordDiff = aWords[1].localeCompare(bWords[1]);
    if (secondWordDiff === 0) {
      return aWords[0].localeCompare(bWords[0]);
    }
    return secondWordDiff;
  });
  for(i=0;i<newLinesw.length;i++){
    wordsarray.push(newLinesw[i].split(" ")[1]);
  }
  newLinesn.sort(function(a,b){return a.split(" ")[0].localeCompare(b.split(" ")[0]); });
  finalLine = newLinesw.concat(newLinesn);
  return finalLine;
}
document.getElementById("testing").innerHTML = testing();

这样运行后,newLinesw里的"a8 act zoo"和"g1 act car"会因为第二个单词都是act,转而按第一个单词a8和g1排序,最终a8会排在g1前面,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:30:36