在开发前端应用程序时,JavaScript 中的数组常常用来存储和处理大量的数据,解决了数据的组织和存储的问题。当然,在开发过程中,我们要了解如何对数组中的数据进行排序,避免不必要的错误和混乱。在ES10 之前,我们可以使用原生的 sort 函数或 Lodash 的 orderBy 函数来处理这种情况。但是,在 ES10 中,我们有一个更好的选择,即使用 Array.prototype.sort() 方法。在本文中,我们将介绍如何使用这个方法对对象数组进行排序,并将其与其他方法进行比较,以便您在开发中选择最好的方法。
简介
在 ES10 中,我们终于可以对数组进行更灵活的排序。sort() 方法是一个非常强大的函数,可以根据您的需求来排序对象中的属性或函数。在过去的版本中,要排序对象需要先手动编写一个 sort() 函数或使用外部库,比如 Lodash。这些方法虽然有用,但在某些情况下,可能不能满足我们的需求。为了解决这个问题,ES10 引入了一个新的 sort() 方法,该方法可以更轻松地对对象进行排序。
使用方法
sort() 方法返回一个经过排序的数组,它没有创建新数组,而是改变了原有的数组,排序方法默认按照字符串形式的Unicode码值进行排序。如果我们想对对象的某个属性进行排序,我们需要给 sort() 函数传入一个比较函数( comparator function)。这个函数将用来定义在排序期间两个元素之间的顺序关系。这个比较函数可以使用 ES6 的箭头函数来实现,例如:
-- -------------------- ---- ------- ----- --- - - - ----- -------- ---- -- -- - ----- ------ ---- -- -- - ----- ---------- ---- -- - -- ------------ -- -- - -- ------ - ------ ------ --- -- ------ - ------ ------ -- ------ -- --- -----------------
在排序过程中,我们使用了一个简单的 if 语句,指定如果第一个元素小于第二个元素,则返回 -1。因此,sort() 函数会交换两个位置。如果第一个元素比第二个元素大,则返回 1,如果它们相等,则返回 0,即它们保持相对位置不变。在这个例子中,我们传递了一个比较函数,该函数将对象数组按年龄升序排序,它会修改原始数组,并按这种方式重新排序 arr 数组,即:
[ { name: 'Charlie', age: 20 }, { name: 'Alice', age: 25 }, { name: 'Bob', age: 30 } ]
深入比较
sort() 方法是使用原地算法运行的,这意味着它在内部排序数组,而不是创建一个新的排序数组。这使得它非常有用,因为您无需使用额外的空间或工具来排序数组。另一个优点是它是一个稳定的排序算法,这意味着如果两个元素相等,则它们将保持相对顺序,这在某些情况下非常重要,例如向用户显示表格。
sort() 方法提供的比较函数允许您按任何属性进行排序,包括字符串、数字、日期、自定义对象等。这个函数仅仅返回一个数字,代表两个对象之间的关系。这个数字越小,表示第一个元素应该出现在第二个元素之前。如果它是一个负数,那么交换两个元素。如果它是 0,那么它们应该保持相对位置不变。如果它是正数,则不需要交换元素。
-- -------------------- ---- ------- -------- ---------- -- - -- -- - -- - ------ --- - ---- -- -- - -- - ------ -- - ---- - ------ -- - -
当然,如果您想写出更简洁的代码,可以使用箭头函数:
const compare = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
示例代码
我们来看一个完整的示例代码,展示如何使用 ES10 中的 Array.prototype.sort() 方法。在下面的例子中,我们将一个包含多个对象的数组按照它们的价格从便宜到昂贵排序:
-- -------------------- ---- ------- --- -------- - - - ----- ------- ---- ------ ----- ------------ ------------ -- - ----- ------ --- ------ ---- ------------ ------------ -- - ----- ------- ----- ------ ---- ------------ ------------ -- - ----- -------- - ----- ------ ---- ------------ ------------ - -- ----------------- -- -- ------- - --------- ----------------------
排序结果如下:
[ { name: 'Pixel 6', price: 749, releaseDate: '2021-10-19' }, { name: 'Galaxy S21', price: 799, releaseDate: '2021-01-29' }, { name: 'OnePlus 9 Pro', price: 969, releaseDate: '2021-03-23' }, { name: 'iPhone 13', price: 1299, releaseDate: '2021-09-14' } ]
这样一来,我们就按照它们的价格,从便宜到昂贵排序了。
结论
使用 ES10 中的 Array.prototype.sort() 方法对对象数组进行排序,是一种非常简单和有效的方式。这种方法可以帮助您按任意属性对数组中的对象进行排序,从而可以解决许多数据处理问题。我们希望本文可以帮助你在开发中更好地使用这个方法,并且可以选择最适合你需求的方法。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67139c12ad1e889fe20e8629