Pet*_*son 194 javascript
假设我想要一个返回输入数组的排序副本的sort函数.我天真地试过这个
function sort(arr) {
return arr.sort();
}
Run Code Online (Sandbox Code Playgroud)
我用它测试了它,这表明我的sort
方法正在改变数组.
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"
Run Code Online (Sandbox Code Playgroud)
我也试过这种方法
function sort(arr) {
return Array.prototype.sort(arr);
}
Run Code Online (Sandbox Code Playgroud)
但它根本不起作用.
有没有一种简单的方法,优选的方式是不需要手动滚动我自己的排序算法或将数组的每个元素复制到一个新的元素?
Rob*_*b W 202
只需复制数组.有很多方法可以做到这一点:
function sort(arr) {
return arr.concat().sort();
}
// Or:
return Array.prototype.slice.call(arr).sort(); // For array-like objects
Run Code Online (Sandbox Code Playgroud)
Put*_*San 115
es6的另一种方式(非深拷贝):
const sorted = [...arr].sort();
Run Code Online (Sandbox Code Playgroud)
spread-syntax as array literal(从mdn复制):
var arr = [1, 2, 3];
var arr2 = [...arr]; // like arr.slice()
Run Code Online (Sandbox Code Playgroud)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator
Jar*_*Par 57
请尝试以下方法
function sortCopy(arr) {
return arr.slice(0).sort();
}
Run Code Online (Sandbox Code Playgroud)
该slice(0)
表达式从元素0开始创建数组的副本.
zzz*_*Bov 30
您可以使用不带参数的slice来复制数组:
var foo,
bar;
foo = [3,1,2];
bar = foo.slice().sort();
Run Code Online (Sandbox Code Playgroud)
小智 11
const arr = [2, 1, 3];
const arrSorted = arr.toSorted();
console.log(arr); //[2, 1, 3]
console.log(arrSorted); //[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
小智 8
您也可以这样做
d = [20, 30, 10]
e = Array.from(d)
e.sort()
Run Code Online (Sandbox Code Playgroud)
这样d将不会被突变。
function sorted(arr) {
temp = Array.from(arr)
return temp.sort()
}
//Use it like this
x = [20, 10, 100]
console.log(sorted(x))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
77643 次 |
最近记录: |