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

JS动态按变量指定key排序对象数组问题排查

JavaScript排序函数无法通过指定key参数排序的排查与解决

问题场景

编写了sortData函数,意图通过第二个参数sortBy指定对象的key(如'a')对对象数组排序,但使用objSort[i][sortBy]的写法无法完成排序,换成直接用对应key的点语法或正确的变量取值方式则可正常运行。

可运行的核心代码片段

if (objSort[i][sortBy] > objSort[j][sortBy]) {
  [objSort[i], objSort[j]] = [objSort[j], objSort[i]]
}

无法运行的完整代码

function sortData(objSort, sortBy) {
  for (let i = 0; i < objSort.length; i++) {
    for (let j = i + 1; j < objSort.length; j++) {
      if (objSort[i][`sortBy`] > objSort[j][`sortBy`]) {
        [objSort[i], objSort[j]] = [objSort[j], objSort[i]]
      }
    }
  }
  console.log(data);
}

const data = [{ a: 4, b: 5 }, { a: 1, b: 10}, { a: 2, b: 5 }, { a: 14, b: 15 }, { a: 12, b: 3 }];
sortData(data,'a');

问题排查

核心错误是模板字符串的误用:
你在方括号中使用了`sortBy`,这会将sortBy作为字符串字面量处理,代码实际在尝试访问对象的"sortBy"属性——而你的数据对象里根本没有这个key,所以比较的都是undefined,自然不会产生排序效果。

解决方案

  1. 去掉模板字符串的反引号,直接用变量名作为方括号的索引,这样才能正确引用sortBy参数传入的key值。
  2. 额外优化:函数最后console.log(data)依赖全局变量,改为打印函数参数objSort更规范。

修正后的完整代码

function sortData(objSort, sortBy) {
  for (let i = 0; i < objSort.length; i++) {
    for (let j = i + 1; j < objSort.length; j++) {
      // 直接使用变量作为属性索引
      if (objSort[i][sortBy] > objSort[j][sortBy]) {
        [objSort[i], objSort[j]] = [objSort[j], objSort[i]]
      }
    }
  }
  console.log(objSort); // 打印函数参数,避免依赖全局变量
}

const data = [{ a: 4, b: 5 }, { a: 1, b: 10}, { a: 2, b: 5 }, { a: 14, b: 15 }, { a: 12, b: 3 }];
sortData(data,'a');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:50:37