0
点赞
收藏
分享

微信扫一扫

除了Lodash,还有哪些库可以实现对象数组按属性值长度排序?

除了 Lodash,还有许多 JavaScript 库可以实现对象数组按属性值长度排序,这些库要么专注于数据处理,要么是功能更全面的工具库。以下是一些常用的选择:

1. Underscore.js

Underscore 是与 Lodash 类似的工具库,API 设计相似,也提供了排序方法:

const _ = require('underscore');

const items = [
  { id: 1, name: 'apple' },
  { id: 2, name: 'banana' },
  { id: 3, name: 'cat' }
];

// 按 name 长度升序排序
const sorted = _.sortBy(items, item => item.name.length);

2. Ramda

Ramda 是一个函数式编程库,强调纯函数和不可变性,排序方式更偏向函数式风格:

const R = require('ramda');

const items = [
  { id: 1, name: 'apple' },
  { id: 2, name: 'banana' },
  { id: 3, name: 'cat' }
];

// 按 name 长度升序排序
const sorted = R.sortBy(R.compose(R.length, R.prop('name')))(items);

// 按 name 长度降序排序(需配合 reverse)
const sortedDesc = R.reverse(R.sortBy(R.compose(R.length, R.prop('name')))(items));

3. Lodash-es(Lodash 的 ES 模块版本)

如果你在现代 ES 模块项目中使用,可以选择 Lodash 的 ES 模块版本,用法与 Lodash 一致但支持树摇:

import { sortBy } from 'lodash-es';

const items = [/* ... */];
const sorted = sortBy(items, item => item.name.length);

4. date-fns(附带数组工具)

虽然主要用于日期处理,但 date-fns 也包含一些数组工具函数,可结合原生方法使用:

import { sortBy } from 'date-fns';

const items = [/* ... */];
// 按 name 长度升序排序
const sorted = sortBy(items, (item) => item.name.length);

5. 原生 JavaScript(无需库)

实际上,无需任何库也能高效实现,原生 Array.sort() 性能甚至可能更优:

const items = [/* ... */];

// 升序(短 -> 长)
const sortedAsc = [...items].sort((a, b) => a.name.length - b.name.length);

// 降序(长 -> 短)
const sortedDesc = [...items].sort((a, b) => b.name.length - a.name.length);

各库对比与选择建议


特点

适用场景

Underscore.js

API 简单,与 Lodash 相似

项目已引入或需要轻量工具库

Ramda

函数式风格,适合函数式编程项目

强调纯函数、不可变性的场景

Lodash-es

支持 ES 模块,可树摇优化体积

现代前端项目(Webpack/Vite 等)

date-fns

主要处理日期,数组工具是附加功能

已使用 date-fns 处理日期的项目

原生 JavaScript

无依赖,性能优

追求轻量、无需额外库的场景

如果项目中已经引入了上述某个库,直接使用对应库的排序方法即可;如果是新项目且仅需排序功能,原生 Array.sort() 是最轻便高效的选择。

举报

相关推荐

0 条评论