当前位置:首页 > JavaScript

js实现排序

2026-02-28 22:10:05JavaScript

实现数组排序

JavaScript中数组排序可以通过内置的Array.prototype.sort()方法实现。该方法默认将元素转换为字符串并按Unicode码点排序,因此对数字排序需自定义比较函数。

const arr = [3, 1, 4, 2];
arr.sort((a, b) => a - b); // 升序:[1, 2, 3, 4]
arr.sort((a, b) => b - a); // 降序:[4, 3, 2, 1]

对象数组按属性排序

当数组元素为对象时,可通过比较对象的特定属性值实现排序。

js实现排序

const users = [
  { name: 'Alice', age: 25 },
  { name: 'Bob', age: 30 }
];
users.sort((a, b) => a.age - b.age); // 按age升序

字符串排序

对字符串数组排序时需注意大小写敏感问题。可通过统一转换为大写或小写后再比较。

const names = ['Alice', 'bob', 'Charlie'];
names.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));

稳定排序实现

ES2019规定sort()必须稳定,但老旧环境可能需要手动实现。可通过记录原始索引来保证稳定性。

js实现排序

function stableSort(arr, compare) {
  return arr
    .map((item, index) => ({ item, index }))
    .sort((a, b) => compare(a.item, b.item) || a.index - b.index)
    .map(({ item }) => item);
}

自定义排序算法

如需实现特定排序算法(如快速排序、归并排序),可参考以下快速排序示例:

function quickSort(arr) {
  if (arr.length <= 1) return arr;
  const pivot = arr[0];
  const left = [];
  const right = [];
  for (let i = 1; i < arr.length; i++) {
    arr[i] < pivot ? left.push(arr[i]) : right.push(arr[i]);
  }
  return [...quickSort(left), pivot, ...quickSort(right)];
}

性能优化建议

对于大规模数据排序:

  • 优先使用原生sort()(V8引擎使用TimSort算法)
  • 避免在比较函数中进行复杂计算
  • 对定型数组(TypedArray)使用专用排序方法

标签: js
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

vue.js实现轮播的方法 使用第三方库(如Swiper) 安装Swiper库: npm install swiper 在Vue组件中引入Swiper: <template>…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…