JavaScript中数组sort()方法的基本使用与踩坑记录

JavaScript中数组sort()方法的基本使用与踩坑记录

sort()方法的基本使用

sort()方法是Javascript中数组对象自带的方法之一,其作用是将数组中的元素按指定的顺序进行排序。

sort()方法本身不接受参数,如果要按照一定的顺序进行排序,则需要在其内部传入比较函数。

比较函数接受两个参数,分别代表当前比较的元素a和下一个比较的元素b,比较函数需要返回一个数字,表示当前元素和下一个元素的大小关系。

例如,要将数组arr按照从大到小的顺序进行排序,则可以这样写:

let arr = [3,6,1,9,2];
arr.sort((a,b) => {
    return b-a;
});
console.log(arr); // [9, 6, 3, 2, 1] 

在上面的例子中,我们传入了一个比较函数,这个函数的返回值是b-a,即按照从大到小的顺序排序。

sort()方法会直接修改原始的数组,而不是返回一个新的排序后的数组。

sort()方法的踩坑记录

sort()方法的默认排序方式

如果sort()方法没有传入比较函数,则默认是将数组中的元素转为字符串,然后按照Unicode编码进行排序。

例如:

let arr = [3,6,1,9,2];
arr.sort();
console.log(arr); // [1, 2, 3, 6, 9]

这个结果并不是我们想要的,因为它并没有按照我们期望的顺序进行排序。这是因为sort()方法默认将数组中的元素转换为字符串,然后按照Unicode编码进行排序。

sort()方法会修改原始数组

sort()方法会直接修改原始的数组,而不是返回一个新的排序后的数组,这在一些情况下可能会导致问题。

例如:

let arr = [3,6,1,9,2];
let sortedArr = arr.sort();
console.log(sortedArr); // [1, 2, 3, 6, 9]
console.log(arr); // [1, 2, 3, 6, 9]

这样做并不会出现问题,因为我们考虑到了sort()方法会修改原始的数组。

但是,如果在对数组进行排序之前,我们需要保留原数组,再对排序后的数组进行操作,这时候就需要特别注意sort()方法会直接修改原数组的问题。

例如,在下面的例子中,我们想要将一个数组的元素从小到大进行排序,并且保留原始的数组。我们可以使用slice()方法,来获得一个原数组的拷贝,然后对拷贝进行排序,这样就不会影响原始数组了。

let arr = [3,6,1,9,2];
let originalArr = arr.slice();
let sortedArr = originalArr.sort();
console.log(sortedArr); // [1, 2, 3, 6, 9]
console.log(originalArr); // [3, 6, 1, 9, 2]

在这个例子中,我们首先使用slice()方法来获取原数组的拷贝,然后对拷贝进行排序,并且不会影响原数组。

示例

下面是一个更加复杂的例子,我们需要实现一个按照特定条件对数组进行排序的函数。

首先,我们定义一个函数,它接受一个字符串作为参数,返回一个比较函数,用于按照字符串中字母出现次数从少到多排序。

function getCompareFunc(key) {
    return (a,b) => {
        let countA = countChar(a, key);
        let countB = countChar(b, key);
        return countA - countB;
    }
}

function countChar(str, ch) {
    let count = 0;
    for(let i=0; i<str.length; i++) {
        if(str[i] === ch) {
            count++;
        }
    }
    return count;
}

在这个函数中,我们首先定义了一个getCompareFunc()函数,它接受一个字符串作为参数,返回一个比较函数。

在这个返回的比较函数中,我们首先使用countChar()函数计算出当前元素中关键字出现的次数,然后根据它们的大小关系返回一个数字。

最后,我们可以使用这个函数来对一个数组进行排序。

let arr = ['aaa', 'bb', 'cccccc', 'd'];
arr.sort(getCompareFunc('c'));
console.log(arr); // ['d', 'bb', 'aaa', 'cccccc']

在这个例子中,我们首先顺序是 'd' < 'bb' < 'aaa' < 'cccccc',根据关键字'c'中字符的出现次数从小到大进行排序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中数组sort()方法的基本使用与踩坑记录 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 基于jsTree的无限级树JSON数据的转换代码

    关于基于 jsTree 的无限级树 JSON 数据的转换代码,我来给您讲解一下完整攻略。 首先,我们需要了解一下 jsTree 的数据结构。它使用 JSON 对象来表示树形结构,其中每个节点都是一个对象,包含以下属性: “id”:节点的唯一标识符; “text”:节点的文本; “icon”:节点的图标; “state”:节点的状态,包括是否被选中、是否展开等…

    JavaScript 2023年5月28日
    00
  • Vuejs使用addEventListener的事件如何触发执行函数的this

    当我们在Vuejs中使用addEventListener添加事件监听器时,我们需要注意事件处理函数的this指向问题。如果我们使用传统的写法编写事件监听函数,那么this指向的就是监听器所在的DOM元素。在Vuejs中,我们的事件处理函数需要绑定到Vue实例上,这样才能使用Vue实例中的数据和方法。 下面是一些如何解决Vuejs中addEventListen…

    JavaScript 2023年6月11日
    00
  • 15个值得收藏的JavaScript函数

    15个值得收藏的JavaScript函数 介绍 在网页应用程序中,JavaScript是常用的编程语言之一。它有许多有用的函数,可以提高程序的效率和交互性。在这篇文章中,我们将介绍“15个值得收藏的JavaScript函数”,这些函数涵盖了从日期和时间到字符串和数学的各个方面。希望这篇文章能够帮助您提高JavaScript编程能力。 日期和时间 1. get…

    JavaScript 2023年5月18日
    00
  • JS实现判断数组是否包含某个元素示例

    下面我将详细讲解如何实现判断数组是否包含某个元素。 1. 使用includes()方法判断数组是否包含某个元素 includes() 方法用来判断一个数组是否包含一个指定的值,如果包含则返回 true,否则返回 false。下面是使用 includes() 方法判断数组是否包含某个元素的示例代码: const arr = [1, 2, 3, 4, 5]; c…

    JavaScript 2023年5月27日
    00
  • AngularJS实现表单手动验证和表单自动验证

    以下是关于“AngularJS实现表单手动验证和表单自动验证”的完整攻略: 一、表单手动验证 1.创建表单 首先,我们需要创建一个表单来进行手动验证。可以使用HTML的form标签、AngularJS的ngForm指令、ngModel指令和ngSubmit指令来完成这个步骤。 示例代码: <form name="myForm" ng…

    JavaScript 2023年6月10日
    00
  • javascript中的Array对象(数组的合并、转换、迭代、排序、堆栈)

    下面是关于JavaScript中的Array对象的完整攻略: 概述 Array是JavaScript中用于存储和操作一组数据的对象,它是一种有序列表,可以存储不同类型的值,包括数字、字符串、对象、甚至是其它数组。 在使用Array时,我们可以通过许多方法来操作它,这些方法可以帮助我们对数组进行合并、转换、迭代、排序和操作堆栈。接下来我们将逐一介绍这些方法。 …

    JavaScript 2023年5月27日
    00
  • js的对象与函数详解

    JS的对象与函数详解 本文将讲解JavaScript中的对象和函数。对象是一种数据类型,它们可以具有属性和方法。函数是一种可调用的对象,它通常用来实现可重复使用的代码块。 对象 JavaScript中的对象可以看作是键值对的集合,每个键都是字符串,每个值可以是任意类型的数据。对象可以通过对象字面量的方式创建,也可以通过构造函数实例化。以下是创建对象的两种方式…

    JavaScript 2023年5月27日
    00
  • JS.findElementById()使用介绍

    JS.findElementById()使用介绍 在JavaScript中,document.getElementById()方法允许您通过DOM(Document Object Model)获取HTML元素。该方法将返回具有指定ID的元素。 语法 以下是 document.getElementById() 的语法: document.getElementB…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部