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

Vanilla JavaScript 按对象属性排序数组的实现求助

按对象b属性升序排序数组的正确实现

正确代码实现

function arraySorter(arr) {
  // 先拷贝原数组避免修改原数据,再按b属性升序排序
  return [...arr].sort((objA, objB) => objA.b - objB.b);
}

// 测试示例1
console.log(arraySorter([
  { a: 1, b: 2 },
  { a: 5, b: 4 },
]));
// 输出: [{a:1,b:2},{a:5,b:4}]

// 测试示例2
console.log(arraySorter([
  { a: 5, b: 4 },
  { a: 2, b: 10 },
]));
// 输出: [{a:5,b:4},{a:2,b:10}]

原代码的问题分析

  1. 破坏原对象结构:你用map把每个对象转成了值数组(比如{a:1,b:2}变成[1,2]),最终无法返回需求要求的对象格式数组。
  2. 错误使用filter:filter是用来筛选数组元素的工具,不是排序方法,而且你的filter没有返回有效判断条件,最终会返回空数组,完全偏离任务目标。

代码逻辑说明

  • [...arr]:创建原数组的浅拷贝,因为sort()方法会直接修改原数组,这样做可以保留原数组的原始状态。
  • sort((objA, objB) => objA.b - objB.b):数组的sort()方法接受一个比较函数,当返回值为负数时,objA排在objB前面;正数则objB在前;0则顺序不变。通过两个对象的b属性差值,刚好实现升序排序。

内容的提问来源于stack exchange,提问作者Bhaskar Deb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:58:34