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

yizhihongxing

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日

相关文章

  • JavaScript 判断判断某个对象是Object还是一个Array

    判断某个对象是Object还是Array,可以通过以下代码实现: if (typeof obj === ‘object’ && obj instanceof Array) { // obj是Array类型 } else { // obj是Object类型 } 关键点解释: typeof obj === ‘object’:使用typeof操作符…

    JavaScript 2023年5月27日
    00
  • Js 正则表达式知识汇总

    Js 正则表达式知识汇总 什么是正则表达式? 正则表达式是一种用来匹配字符串模式的工具,它由字符和特殊字符组成。在JavaScript中,可以使用RegExp对象来表示正则表达式模式。正则表达式可以用来在字符串中查找匹配的文本、替换文本、验证内容格式等。 正则表达式的语法 正则表达式语法很强大,要掌握所有的用法需要花费一定的时间和精力。下面是一些常见的元字符…

    JavaScript 2023年6月10日
    00
  • 关于js datetime的那点事

    关于JS DateTime的那点事 Javascript中的日期和时间对象是非常常用的,特别是在前端web开发中。在这篇攻略中,我们会详细讲解JS DateTime相关的概念以及如何在JS中处理日期和时间。 JS中的日期和时间对象 在JS中,日期和时间对象可以通过 Date() 构造函数来创建。以下是几种常见的创建日期对象的方法。 创建一个新日期对象 con…

    JavaScript 2023年5月27日
    00
  • 使用Cookies保存网站历史浏览记录实例代码

    下面是使用 Cookies 保存网站历史浏览记录的完整攻略。 1. 需求分析 在网站上实现浏览记录的保存,主要的需求分析包括以下几点: 当用户浏览网站时,需要记录用户的浏览历史。 浏览历史需要以列表形式展示在网站上。 浏览历史需要随着用户的浏览动态更新。 浏览历史需要在用户关闭浏览器后依然能够保存。 用户进入网站时需要从 Cookies 中读取保存的浏览历史…

    JavaScript 2023年6月11日
    00
  • JavaScript基础语法之js表达式

    让我们一起来详细讲解一下“JavaScript基础语法之js表达式”的完整攻略。 什么是JavaScript表达式? JavaScript表达式是JavaScript中计算值的一种方法。表达式可以是简单的数学计算、变量、函数调用,或者由运算符和操作数组成的复杂语句。在JavaScript中,任何使用分号(;)结尾的操作都是表达式。 在JavaScript中,…

    JavaScript 2023年5月18日
    00
  • jquery validation验证身份证号,护照,电话号码,email(实例代码)

    下面是“jquery validation验证身份证号,护照,电话号码,email”的完整攻略: 1. 引入jQuery和jQuery Validation插件 首先需要引入jQuery和jQuery Validation插件的js文件和css文件: <!– 引入jQuery –> <script src="https://c…

    JavaScript 2023年6月10日
    00
  • 利用js动态添加删除table行的示例代码

    当需要在网页中展示和处理数据时,使用table是一种非常常见的方式。在一些场景下,需要动态地添加或删除表格行,这就需要使用JavaScript进行操作。下面是一份利用js动态添加删除table行的示例代码攻略。 1. HTML结构 首先,我们需要在HTML中定义一个table,标记好每一列的thead和tbody,并预留出一行作为模板行。 <table…

    JavaScript 2023年6月11日
    00
  • js中apply和Math.max()函数的问题及区别介绍

    JS中的apply方法可以扩展函数的功能,它允许你在一个对象的上下文中运行函数,并将参数作为数组传递。 Math.max()函数用于返回一组数中的最大值,在使用时可以通过apply方法传递一个数组作为参数。下面将会介绍这两个函数的问题及区别。 apply方法的使用 function myFunction(a, b, c) { console.log(a + …

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