首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在不改变原始数组的情况下对数组进行排序?

如何在不改变原始数组的情况下对数组进行排序?
EN

Stack Overflow用户
提问于 2012-03-07 06:11:22
回答 6查看 155.8K关注 0票数 357

假设我想要一个排序函数,它返回输入数组的排序副本。我天真地试过这个

代码语言:javascript
运行
复制
function sort(arr) {
  return arr.sort();
}

我用这个来测试它,这表明我的sort方法正在改变数组。

代码语言:javascript
运行
复制
var a = [2,3,7,5,3,7,1,3,4];
sort(a);
alert(a);  //alerts "1,2,3,3,3,4,5,7,7"

我也尝试过这种方法。

代码语言:javascript
运行
复制
function sort(arr) {
  return Array.prototype.sort(arr);
}

但它根本不起作用。

有没有一种简单的方法来解决这个问题,最好是一种不需要手摇我自己的排序算法或将数组的每个元素复制到一个新的元素中的方法?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-02-24 23:52:48

在对数组进行排序之前,需要复制该数组。使用es6制作浅拷贝的一种方法是:

代码语言:javascript
运行
复制
const sorted = [...arr].sort();

数组文字形式的扩展语法(从mdn复制):

代码语言:javascript
运行
复制
var arr = [1, 2, 3];
var arr2 = [...arr]; // like arr.slice()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator

票数 346
EN

Stack Overflow用户

发布于 2012-03-07 06:13:08

只需复制数组。有很多方法可以做到这一点:

代码语言:javascript
运行
复制
function sort(arr) {
  return arr.concat().sort();
}

// Or:
return Array.prototype.slice.call(arr).sort(); // For array-like objects
票数 246
EN

Stack Overflow用户

发布于 2012-03-07 06:13:28

请尝试以下操作

代码语言:javascript
运行
复制
function sortCopy(arr) { 
  return arr.slice(0).sort();
}

slice(0)表达式从元素0开始创建数组的副本。

票数 77
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9592740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档