利用 ES10 中的 Array.prototype.sort() 方法排序对象数组

阅读时长 5 分钟读完

在前端开发中,我们经常需要对包含对象的数组进行排序。针对这个需求,ES10 中的 Array.prototype.sort() 方法提供了一种简单方便的解决方案。本文将详细介绍这个方法的使用和应用场景,并给出示例代码帮助大家更好地理解和掌握。

Array.prototype.sort() 的基本用法

Array.prototype.sort() 是 JavaScript 中的一个原生方法,用于对数组进行排序。该方法可以被传入一个函数作为参数,以便自定义排序规则。

下面是 Array.prototype.sort() 的基本语法:

其中,可选的参数 compareFunction 是一个比较函数,它接收两个参数 a 和 b。如果 a 应该排在 b 前面,则返回一个负数,如果 b 应该排在 a 前面,则返回一个正数,如果 a 和 b 相等则返回 0。

如果 compareFunction 省略不传,则 Array.prototype.sort() 默认使用字符串比较排序(按 ASCII 字典序)。

接下来,我们来看一个简单的示例:

上述代码中,我们使用 compareFunction 对数组中的数字从小到大排序。在 compareFunction 中,如果 a 应该排在 b 前面,我们返回 a - b,否则返回 b - a。这样就完成了排序。

对象数组的排序

当涉及到对象数组的排序时,需要特别注意。默认情况下,Array.prototype.sort() 无法正确地对对象进行排序。这是因为对象不是基本类型数据,无法用“小于”、“等于”、“大于”三种关系比较大小。

为了能够对对象数组进行排序,需要传入一个自定义的比较函数。下面,我们通过一个具体的例子来深入了解这个过程。

假设我们有一个包含学生信息的数组 students,每个学生信息用一个对象表示。

我们需要根据学生的成绩来进行排序。为此,我们定义一个自定义的比较函数 compare 函数:

接着,我们使用 Array.prototype.sort() 方法进行排序:

最后,我们输出排序后的数组,查看排序结果:

输出结果如下:

从输出结果中可以看出,我们基于分数对学生进行了降序排序。

利用 ES10 的 Array.prototype.sort() 方法进行排序

从 ES10 开始,Array.prototype.sort() 方法的比较函数可以返回一个字符串,以指定排序方式。具体来说,可以返回以下三种字符串之一:

  • 'asc': 升序排列
  • 'desc': 降序排列
  • 'none': 不排序

为了方便排序,我们先定义一个 students 的数组,如下所示:

-- -------------------- ---- -------
----- -------- - --
        ----- ------
        ---- ---
        ------ --
    --
    -
        ----- -------
        ---- ---
        ------ --
    --
    -
        ----- -------
        ---- ---
        ------ --
    -
--

接下来,我们就可以利用 ES10 中的 Array.prototype.sort() 方法轻松实现对对象数组的排序:

从以上代码中,我们可以看到,我们将排序规则封装在一个箭头函数内,该函数接受两个参数 a 和 b,并根据它们的 score 属性进行比较。

最后,输出 students 数组,我们可以看到,结果和之前的排序结果一样。

总结

通过本文的介绍,我们了解了 ES10 中 Array.prototype.sort() 方法的使用和针对对象数组的排序。相比于手动实现排序,利用 Array.prototype.sort() 方法可以提高代码的复用性和可读性。同时,利用 ES10 中的语法糖,我们可以更加简洁地实现这个功能。因此,建议在日常开发中使用 Array.prototype.sort() 方法来加快开发效率。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64d3039eb5eee0b525a7f351

纠错
反馈