Nodejs 有没有好用的快速排序的库?

Nodejs 有没有好用的快速排序的库?

除了支持普通数组的排序,还要支持数组对象的排序。

从小到大: [1,3,2,5] ==> [1,2,3,5] 按年龄从小到大: [{name:‘b’,age:12},{name:‘c’,age:21},{name:‘a’,age:2}] ==> [{name:‘a’,age:2},{name:‘b’,age:12},{name:‘c’,age:21},]

underscore 和 async 虽然都有sortby() 函数支持,但还是不太好用。

8 回复

当然可以。在 Node.js 中,如果你需要一个功能强大且易于使用的排序库来处理普通数组以及包含对象的数组,你可以考虑使用一些流行的第三方库,例如 lodash 或者 ramda。这些库提供了丰富的函数,不仅可以对数组进行基本排序,还可以根据自定义条件(如对象中的属性)进行排序。

使用 Lodash 进行排序

Lodash 是一个非常流行的 JavaScript 实用工具库,它提供了许多有用的函数来简化常见的编程任务,包括排序。

安装 Lodash

首先,你需要安装 lodash 库。你可以通过 npm 来安装:

npm install lodash

示例代码

以下是一个简单的示例,展示了如何使用 lodash 对数组进行排序:

const _ = require('lodash');

// 对普通数组进行排序
let numbers = [1, 3, 2, 5];
let sortedNumbers = _.sortBy(numbers);
console.log(sortedNumbers); // 输出: [1, 2, 3, 5]

// 对对象数组进行排序
let people = [
    { name: 'b', age: 12 },
    { name: 'c', age: 21 },
    { name: 'a', age: 2 }
];

// 按照年龄从小到大排序
let sortedPeopleByAge = _.sortBy(people, ['age']);
console.log(sortedPeopleByAge);
// 输出:
// [
//   { name: 'a', age: 2 },
//   { name: 'b', age: 12 },
//   { name: 'c', age: 21 }
// ]

使用 Ramda 进行排序

Ramda 是另一个强大的库,它提供了函数式编程的支持,非常适合处理数组和其他数据结构。

安装 Ramda

同样,你需要先通过 npm 安装 Ramda:

npm install ramda

示例代码

以下是使用 Ramda 对数组进行排序的示例:

const R = require('ramda');

// 对普通数组进行排序
let numbers = [1, 3, 2, 5];
let sortedNumbers = R.sort(R.ascend(R.identity), numbers);
console.log(sortedNumbers); // 输出: [1, 2, 3, 5]

// 对对象数组进行排序
let people = [
    { name: 'b', age: 12 },
    { name: 'c', age: 21 },
    { name: 'a', age: 2 }
];

// 按照年龄从小到大排序
let sortedPeopleByAge = R.sortBy(R.prop('age'), people);
console.log(sortedPeopleByAge);
// 输出:
// [
//   { name: 'a', age: 2 },
//   { name: 'b', age: 12 },
//   { name: 'c', age: 21 }
// ]

以上示例展示了如何使用 lodash 和 ramda 来实现数组的排序。这两个库都提供了简洁且功能强大的 API,可以帮助你轻松地完成复杂的排序任务。


花了一个小时,自己写了一个支持数组对象的快速排序的库。 https://github.com/bsspirit/ape-algorithm

原生的不行?

[].sort(function (a, b) {
  return a.age > b.age;
});

好厉害,比原生的效率如何呢?

原生的实现方式可能因浏览器不同而不同, 不一定用快速排序

每种算法都有适用的情况,我当时的情况,就是前端表格排序,普通的快速排序就已经适合了。 等我用到堆排序的时候,基于框架实现个算法也并不麻烦。

Node.js 本身提供了非常方便的方法来处理排序需求,无需依赖外部库。你可以直接使用 JavaScript 的 Array.prototype.sort() 方法来实现普通数组和数组对象的排序。

示例代码

对普通数组进行排序

const numbers = [1, 3, 2, 5];
numbers.sort((a, b) => a - b);
console.log(numbers); // 输出:[1, 2, 3, 5]

对对象数组进行排序

const people = [
    { name: 'b', age: 12 },
    { name: 'c', age: 21 },
    { name: 'a', age: 2 }
];

people.sort((a, b) => a.age - b.age);
console.log(people);
// 输出:
// [
//   { name: 'a', age: 2 },
//   { name: 'b', age: 12 },
//   { name: 'c', age: 21 }
// ]

解释

  • 普通数组排序numbers.sort((a, b) => a - b) 这段代码中的 (a, b) => a - b 是一个比较函数,它确保了数字从小到大排序。

  • 对象数组排序people.sort((a, b) => a.age - b.age) 同样使用了一个比较函数 (a, b) => a.age - b.age 来确保对象按照 age 属性从小到大排序。

通过这些简单的代码片段,你可以轻松地实现普通数组和对象数组的排序。不需要额外引入其他库,Node.js 自身就提供了强大的功能来满足你的需求。

回到顶部