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技术站