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

如何在Javascript中为Array.sort传入动态比较逻辑

动态列排序二维数组的解决方案

你不需要通过字符串拼接生成比较逻辑,直接利用JavaScript的闭包和循环就能实现动态列的排序逻辑,而且更安全高效。

修正后的代码

function dynamicSort(table, columns){
  table.sort((a, b) => {
    // 遍历所有指定的排序列
    for (const col of columns) {
      const comparison = a[col].localeCompare(b[col]);
      // 如果当前列比较结果不为0,直接返回该结果
      if (comparison !== 0) {
        return comparison;
      }
    }
    // 所有列都相等时返回0
    return 0;
  });
}

function testIt(){
  var table = [['John','Doe'], ['Adam','Doe'], ['Sam','Adams'],['Bud','Wiser']];
  var sortColumns=[1,0];

  dynamicSort(table,sortColumns);
  for (row in table) console.log(table[row].join(", "));
}

为什么之前的方法失败

Array.sort() 要求传入的比较参数必须是函数或undefined,直接传字符串会触发你遇到的TypeError。即便用new Function(),正确写法也需要单独分离函数体字符串(而非完整的箭头函数字符串),但这种方式不仅冗余,还存在代码注入的安全风险,完全没必要。

代码说明

  • 遍历传入的columns数组,依次对每一列进行比较
  • 只要某一列的比较结果不为0(即两元素不相等),就返回该结果,终止后续比较
  • 所有列都相等时返回0,保持元素原有顺序(注:sort()在V8引擎中已实现稳定排序)

这个方案支持任意数量的排序列,无需修改核心逻辑,完全适配你的动态需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:02:20