在前端开发中,我们经常需要根据多个字段对对象数组进行排序。例如,在电商网站上,我们可能需要按价格和销量对商品列表进行排序。本文将介绍如何使用 JavaScript 中的 Array.sort()
方法来实现多字段排序。
一、基本用法
Array.sort()
方法是 JavaScript 内置的排序方法,它可以对数组进行原地排序,即修改原始数组而不创建新的数组。该方法接受一个可选的比较函数作为参数,用于指定排序的规则。
比较函数有两个参数,分别代表要比较的两个元素。如果第一个元素应排在第二个元素之前,则返回一个负数;如果第一个元素应排在第二个元素之后,则返回一个正数;如果两个元素相等,则返回 0。
下面是一个简单的例子,演示如何按数字大小对数组进行排序:
const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]; arr.sort((a, b) => a - b); console.log(arr); // [1, 1, 2, 3, 3, 4, 5, 5, 6, 9]
二、多字段排序
对于对象数组,我们可以使用比较函数来对数组进行排序。假设我们有一个包含学生信息的数组,每个学生对象有 name
、age
和 score
三个字段,我们需要先按照分数从高到低排序,再按照年龄从小到大排序,最后按照姓名字典序排序。可以这样实现:
-- -------------------- ---- ------- ----- -------- - - - ----- -------- ---- --- ------ -- -- - ----- ------ ---- --- ------ -- -- - ----- ---------- ---- --- ------ -- -- - ----- -------- ---- --- ------ -- -- - ----- ------ ---- --- ------ -- - -- ----------------- -- -- - -- -------- --- -------- - ------ ------- - -------- -- ---------- - ---- -- ------ --- ------ - ------ ----- - ------ -- ----------------- - ---- - ------ ----------------------------- -- ----------------- - --- ----------------------
输出结果为:
[ { name: 'Bob', age: 18, score: 90 }, { name: 'Eva', age: 20, score: 85 }, { name: 'Alice', age: 20, score: 85 }, { name: 'David', age: 18, score: 80 }, { name: 'Charlie', age: 19, score: 75 } ]
三、关键字排序
在实际开发中,我们可能需要对某个字段进行排序,但是该字段可能是一个对象,而不是一个简单类型。例如,我们有一个包含商品信息的数组,每个商品对象有 name
、price
和 category
三个字段,其中 category
是一个包含 id
和 name
两个字段的对象。如果我们要按照商品分类、价格从低到高的顺序排序,可以这样实现:
const products = [ { name: 'iPhone', price: 5999, category: { id: 1, name: '手机' } }, { name: 'iPad', price: 3299, category: { id: 2, name: '平板电脑' } }, { name: 'MacBook Pro', price: 11999, category: { id: 3, name: '笔记本电脑' } }, { name: 'Apple Watch', > 来源:[JavaScript中文网](https://www.javascriptcn.com/post/12697) ,转载请注明来源 [https://www.javascriptcn.com/post/12697](https://www.javascriptcn.com/post/12697)