当前位置:首页 > JavaScript

js实现列表排序

2026-04-07 17:10:35JavaScript

数组排序方法

JavaScript 提供了 Array.prototype.sort() 方法用于对数组元素进行排序。默认情况下,该方法将元素转换为字符串并按照 Unicode 码点顺序排序。

const fruits = ['banana', 'apple', 'orange', 'grape'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'grape', 'orange']

数字排序

对于数字数组,直接使用 sort() 会得到错误结果,需要自定义比较函数:

js实现列表排序

const numbers = [40, 100, 1, 5, 25];
numbers.sort((a, b) => a - b); // 升序
console.log(numbers); // [1, 5, 25, 40, 100]

numbers.sort((a, b) => b - a); // 降序
console.log(numbers); // [100, 40, 25, 5, 1]

对象数组排序

当排序对象数组时,需要根据特定属性进行比较:

const users = [
  { name: 'John', age: 25 },
  { name: 'Jane', age: 30 },
  { name: 'Bob', age: 20 }
];

// 按年龄升序
users.sort((a, b) => a.age - b.age);
console.log(users);
// [{name: 'Bob', age: 20}, {name: 'John', age: 25}, {name: 'Jane', age: 30}]

// 按名字字母顺序
users.sort((a, b) => a.name.localeCompare(b.name));
console.log(users);
// [{name: 'Bob', age: 20}, {name: 'Jane', age: 30}, {name: 'John', age: 25}]

稳定排序

ES2019 规定 sort() 必须是稳定排序(相同元素保持原始顺序)。对于需要稳定排序的复杂场景:

js实现列表排序

const items = [
  { name: 'item1', priority: 1 },
  { name: 'item2', priority: 2 },
  { name: 'item3', priority: 1 }
];

// 按优先级排序(稳定)
items.sort((a, b) => a.priority - b.priority);
console.log(items);
// [
//   {name: 'item1', priority: 1},
//   {name: 'item3', priority: 1},
//   {name: 'item2', priority: 2}
// ]

性能优化

对于大型数组,考虑使用 TypedArray 或 Web Worker 进行优化:

// 使用 Int32Array 处理大量数字
const largeArray = new Int32Array([...]);
largeArray.sort((a, b) => a - b);

自定义排序算法

如果需要实现特定排序算法(如快速排序):

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)];
}

console.log(quickSort([3, 1, 4, 2])); // [1, 2, 3, 4]

标签: 列表js
分享给朋友:

相关文章

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 无限滚动列表通常用于展示大量数据,通过动态加载数据减少初始渲染压力。以下是基于Vue的实现方法: 使用Intersection Observer API监听滚动 Inters…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

vue 实现列表

vue 实现列表

Vue 实现列表的方法 在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象进行渲染。以下是几种常见的实现方式: 基础列表渲染 通过 v-for 指令遍历数组,动态生成列表项。 &…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

vue实现文本列表

vue实现文本列表

Vue 实现文本列表的方法 Vue 可以通过多种方式实现文本列表的渲染和管理,以下是几种常见的方法: 使用 v-for 指令渲染列表 通过 v-for 指令可以动态渲染数组或对象中的文本列表。 &…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…