首页 > web前端 > js教程 > 正文

js 怎样对数组进行排序

小老鼠
发布: 2025-08-14 17:43:02
原创
655人浏览过

javascript数组排序最常用sort()方法,其默认按字符串unicode码点排序,可能导致数字排序异常,因此数字排序需传入比较函数实现升序或降序;对对象数组排序时,比较函数可基于属性值进行比较,并支持忽略大小写等处理;为保持原数组不变,应使用扩展运算符或slice()创建副本后再排序;复杂排序逻辑可通过在比较函数中实现多条件判断来完成,如先按评分降序再按价格升序,从而满足多样化业务需求,最终确保排序结果准确且原始数据不受影响。

js 怎样对数组进行排序

对数组进行排序,JavaScript 提供了多种方法,最常用的是

sort()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
方法,但需要注意其默认行为和自定义排序方式。

解决方案

JavaScript 提供了内置的

sort()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
方法来对数组进行排序。默认情况下,
sort()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
方法将数组元素转换为字符串,并按照 Unicode 码点进行排序,这可能会导致数字排序出现问题。因此,对于数字数组或需要自定义排序规则的情况,需要提供一个比较函数。

1. 默认排序(字符串排序):

const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort(); // fruits 现在是 ["Apple", "Banana", "Mango", "Orange"]

const numbers = [1, 10, 2, 20];
numbers.sort(); // numbers 现在是 [1, 10, 2, 20]  (注意:不是数字排序)
登录后复制

2. 数字排序(使用比较函数):

为了正确地对数字进行排序,需要提供一个比较函数作为

sort()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
方法的参数。比较函数应该返回一个数字:

  • 如果第一个参数小于第二个参数,返回负数。
  • 如果第一个参数大于第二个参数,返回正数。
  • 如果两个参数相等,返回 0。
const numbers = [1, 10, 2, 20];
numbers.sort((a, b) => a - b); // numbers 现在是 [1, 2, 10, 20]  (升序)

numbers.sort((a, b) => b - a); // numbers 现在是 [20, 10, 2, 1]  (降序)
登录后复制

3. 对象数组排序:

如果要对对象数组进行排序,比较函数需要访问对象的属性。

const items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic', value: 13 },
  { name: 'Zeros', value: 37 }
];

// 按 value 升序排序
items.sort((a, b) => a.value - b.value);

// 按 name 排序 (字符串比较)
items.sort((a, b) => {
  const nameA = a.name.toUpperCase(); // 忽略大小写
  const nameB = b.name.toUpperCase();
  if (nameA < nameB) {
    return -1;
  }
  if (nameA > nameB) {
    return 1;
  }
  return 0;
});
登录后复制

数组排序后如何保持原始数组不变?

sort()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
方法会直接修改原始数组。如果需要保持原始数组不变,可以先创建一个数组的副本,然后再对副本进行排序。

const originalArray = [3, 1, 4, 1, 5, 9, 2, 6];
const sortedArray = [...originalArray].sort((a, b) => a - b); // 使用扩展运算符创建副本

console.log(originalArray); // 输出: [3, 1, 4, 1, 5, 9, 2, 6] (未修改)
console.log(sortedArray);   // 输出: [1, 1, 2, 3, 4, 5, 6, 9]
登录后复制

或者使用

slice()
登录后复制
方法:

const originalArray = [3, 1, 4, 1, 5, 9, 2, 6];
const sortedArray = originalArray.slice().sort((a, b) => a - b); // 使用 slice() 创建副本

console.log(originalArray); // 输出: [3, 1, 4, 1, 5, 9, 2, 6] (未修改)
console.log(sortedArray);   // 输出: [1, 1, 2, 3, 4, 5, 6, 9]
登录后复制

如何实现更复杂的排序逻辑?

比较函数可以包含更复杂的逻辑,例如多条件排序。假设要先按一个属性升序排序,如果该属性相等,则按另一个属性降序排序。

const products = [
  { name: 'Laptop', price: 1200, rating: 4.5 },
  { name: 'Keyboard', price: 75, rating: 4.8 },
  { name: 'Mouse', price: 25, rating: 4.2 },
  { name: 'Monitor', price: 300, rating: 4.5 },
  { name: 'Headphones', price: 100, rating: 4.8 }
];

products.sort((a, b) => {
  // 先按 rating 降序排序
  if (b.rating !== a.rating) {
    return b.rating - a.rating;
  }

  // 如果 rating 相等,则按 price 升序排序
  return a.price - b.price;
});

console.log(products);
登录后复制

这个例子展示了如何根据多个条件对对象数组进行排序,使得排序更加灵活和强大。 实际应用中,可能需要根据具体的业务需求来定制排序规则。 记住,理解

sort()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
方法的默认行为以及如何使用比较函数是掌握 JavaScript 数组排序的关键。

以上就是js 怎样对数组进行排序的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号