5-33 WPS JS宏sort数组排序

内容分享2小时前发布
0 0 0

一、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)

}

三、自定义函数测试

5-33 WPS JS宏sort数组排序

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-数组简易循环

}

结果:

5-33 WPS JS宏sort数组排序

以下是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() 方法可以高效处理各种排序任务。如果您需要更深入的示例或特定场景的代码,请提供更多细节!

© 版权声明

相关文章

暂无评论

none
暂无评论...