一、sort():数组排序
参数:sort(箭头函数或自定义函数)
arr.sort((a,b)=>a-b)//升序
arr.sort((a,b)=>b-a)//降序
arr.sort(zdyhs)//自定义函数
二、基础测试:
function test(){
var arr=[8,2,170,4,120,15,18];
arr1=arr.sort()//默认:按 ASCII 码顺序升序排列
//结果:arr1=[120,15,170,18,2,4,8];Array/object
var arr=[8,2,170,4,120,15,18];
arr2=arr.sort((a,b)=>a-b);//升序
//结果:arr2=[2,4,8,15,18,120,170];Array/object
var arr=[8,2,170,4,120,15,18];
arr3=arr.sort((a,b)=>b-a);//降序
//结果:arr3=[170,120,18,15,8,4,2];Array/object
var arr11=[“good”,”goo”,”g”,”go”];
arr4=arr11.sort((a,b)=>b-a);
//结果:arr4=[“good”,”goo”,”g”,”go”];Array/object
var arr11=[“good”,”goo”,”g”,”go”];
arr5=arr11.sort((a,b)=>a.length-b.length);//字符长度排序
//结果:arr5=[“g”,”go”,”goo”,”good”];Array/object
var arr11=[“a”,”f”,”g”,”d”,”f”];
arr6=arr11.sort((a,b)=>a.localeCompare(b));//字符串排序
//结果:arr6=[“a”,”d”,”f”,”f”,”g”];Array/object
var arr11=[“a”,”f”,”g”,”d”,”f”];
arr7=arr11.sort((a,b)=>b.localeCompare(a));//字符串排序
//结果:arr7=[“g”,”f”,”f”,”d”,”a”];Array/object
}
//自定义函数测试:
function test(){
var arr=[8,2,170,4,120,15,18];
arr1=arr.sort()
arr2=arr.sort((a,b)=>a-b);//升序
arr3=arr.sort((a,b)=>b-a);//降序
var arr1=[“good”,”who”,”i”,”am”];
arr4=arr1.sort((a,b)=>b-a);
arr5=arr1.sort((a,b)=>a.length-b.length)
}
三、自定义函数测试

function test3(){
var Rng=Range(“a2”,Range(“d999”).End(xlUp));//选择区域
var arr=Rng.Value();//选择区域转数组
function fun(a,b){
var x=WorksheetFunction.Sum(a.slice(1));//slice(1)切片1到最后内容
var y=WorksheetFunction.Sum(b.slice(1));
return y-x
}
arr.sort(fun).forEach((v,k)=>Range(“f1:i1”).Offset(k+1).Value2=v);//forEach-数组简易循环
}
结果:

以下是AI整理内容sort方法在数组排序中的应用
(只能参考)
sort方法在数组排序中的应用
sort() 是 JavaScript 数组的内置方法,用于对数组元素进行排序。它默认将元素转换为字符串并按 ASCII 字符顺序升序排列,但通过自定义比较函数,可以实现各种灵活的排序需求。以下我将从核心概念、应用场景、示例和注意事项等方面,结构化地解释其应用。内容基于历史对话中的信息整理。
1. 核心概念与默认行为
基本功能:sort() 方法直接在原数组上进行排序(原地排序),不会创建新数组。默认情况下,它:
将所有元素隐式转换为字符串。
按 ASCII 码顺序升序排列(例如,数字 10 会被排在 2 前面,因为 “10” 的 ASCII 值小于 “2”)。
适用于字符串数组的简单排序,但对数字数组可能产生意外结果。
语法:array.sort([compareFunction])
可选参数 compareFunction 是一个函数,用于定义排序逻辑。
2. 自定义排序的应用场景
通过传入比较函数,sort() 可以处理复杂排序需求。比较函数接收两个参数(a 和 b),并根据返回值决定排序顺序:
返回负数:a 排在 b 前面。
返回 0:a 和 b 相对位置不变。
返回正数:b 排在 a 前面。
常见应用场景包括:
数字排序:默认字符串排序会导致数字错误(如 [10, 2] 排序为 [“10”, “2”])。使用比较函数修复:
升序:array.sort((a, b) => a – b)(例如,[10, 2].sort((a,b) => a-b) 结果为 [2, 10])。
降序:array.sort((a, b) => b – a)(例如,[1, 5, 3].sort((a,b) => b-a) 结果为 [5, 3, 1])。
对象数组排序:基于对象属性排序,如按年龄或名称排序用户列表:
示例:users.sort((a, b) => a.age – b.age) (按年龄升序)。
字符串属性排序:users.sort((a, b) => a.name.localeCompare(b.name)) (按名称字母顺序)。
多条件排序:结合多个属性,例如先按分数降序,再按名称升序:
students.sort((a, b) => { if (a.score !== b.score) return b.score – a.score; // 分数降序 return a.name.localeCompare(b.name); // 名称升序 })。
3. 实际代码示例
以下是一些常见应用示例(可直接在 JavaScript 环境中运行):
基本数字排序:
let numbers = [10, 2, 5, 1];
numbers.sort((a, b) => a – b); // 升序:结果 [1, 2, 5, 10]
console.log(numbers); // 输出修改后的数组
字符串数组降序:
let fruits = [“apple”, “Banana”, “cherry”];
fruits.sort((a, b) => b.localeCompare(a)); // 降序:结果 [“cherry”, “Banana”, “apple”]
复杂对象排序(如产品列表按价格升序,再按名称排序):
let products = [
{ name: “Laptop”, price: 1000 },
{ name: “Phone”, price: 500 },
{ name: “Tablet”, price: 500 }
];
products.sort((a, b) => {
if (a.price !== b.price) return a.price – b.price;
return a.name.localeCompare(b.name);
});
// 结果:先按价格升序,同价格按名称排序
console.log(products); // [{name: “Phone”, price: 500}, {name: “Tablet”, price: 500}, {name: “Laptop”, price: 1000}]
4. 注意事项
原地修改:sort() 方法直接改变原数组,如果需要保留原数组,先复制再排序(例如 […array].sort(…))。
性能考虑:排序算法在大多数 JavaScript 引擎中基于 TimSort 或类似高效算法,时间复杂度通常为 O(n log n),但对大型数组需注意性能。
常见错误:
忘记比较函数导致数字排序错误(如 [1, 10].sort() 结果为 [1, 10] 而非 [1, 10] 的数值顺序)。
比较函数未处理边界情况(如 NaN 或 undefined 元素)。
浏览器兼容性:sort() 在所有现代浏览器和 Node.js 中均支持,但比较函数的实现需确保逻辑严谨。
通过合理使用比较函数,sort() 方法可以高效处理各种排序任务。如果您需要更深入的示例或特定场景的代码,请提供更多细节!
