乐闻世界logo
搜索文章和话题

JS 如何按字符串属性值对对象数组进行排序

3个答案

1
2
3

在 JavaScript 中,如果要根据对象数组中对象的字符串属性进行排序,通常可以使用 Array.prototype.sort() 方法。这是一个自定义排序的方法,可以根据返回值来决定数组的顺序。

以下是按照对象的字符串属性对数组进行排序的具体步骤及例子:

  1. 定义一个比较函数,该函数接受两个参数,即要比较的两个对象。
  2. 在比较函数中,根据对象的字符串属性来比较它们的顺序。
  3. 使用字符串的 localeCompare 方法来实现不区分大小写的排序,或者直接使用 <> 操作符来实现区分大小写的排序。
  4. 调用数组的 sort 方法,并将比较函数作为参数传递。

以下是一个例子,假设我们有一个学生对象数组,并且希望根据学生的姓名(name属性)来对数组进行排序。

javascript
// 学生对象数组 let students = [ { id: 1, name: "张三" }, { id: 2, name: "李四" }, { id: 3, name: "王五" } ]; // 比较函数 function compareByName(a, b) { // 使用 localeCompare 进行不区分大小写的字符串比较 return a.name.localeCompare(b.name); } // 根据姓名排序 students.sort(compareByName); // 输出排序后的数组 console.log(students);

如果要求区分大小写的排序:

javascript
function compareByNameCaseSensitive(a, b) { if (a.name < b.name) { return -1; } if (a.name > b.name) { return 1; } return 0; } students.sort(compareByNameCaseSensitive);

以上代码将会根据学生姓名的字典顺序对 students 数组进行排序。如果需要其他方式的排序(例如倒序或者根据其他属性排序),只需要调整比较函数 compareByName 的逻辑即可。

2024年6月29日 12:07 回复

ES6/ES2015或更高版本中你可以这样做:

shell
objs.sort((a, b) => a.last_nom.localeCompare(b.last_nom));

ES6/ES2015 之前

shell
objs.sort(function(a, b) { return a.last_nom.localeCompare(b.last_nom) });
2024年6月29日 12:07 回复

我在 TypeORM 文档和源代码中都找不到 OR 运算符的任何概念。它完全支持吗? 我正在尝试使用存储库执行基本搜索。

js
db.getRepository(MyModel).find({ name : "john", lastName: "doe" })

我知道这会生成 AND 运算,但我需要 OR 运算,因此 SQL 如下所示: name='john' OR lastName='doe' 我是否被迫使用查询生成器来完成这样的基本操作?

2024年6月29日 12:07 回复

你的答案