js 随机排序一个数组,sort中是如何执行的?
var arr = [1,2,3,4,5,6,7,8,9,10];
arr.sort(function(){
return Math.random() - 0.5;
})
console.log(arr);
js 随机排序一个数组,sort中是如何执行的?
var arr = [1,2,3,4,5,6,7,8,9,10];
arr.sort(function(){
return Math.random() - 0.5;
})
console.log(arr);
Array.prototype.sort在es规范中只定义了行为,没有规定具体排序算法的实现,因此各个引擎的实现有所不同。
对V8而言,数组长度小于10则使用插入排序,否则使用快速排序
https://github.com/v8/v8/blob...
然后这个方法在已是过去时,4月份V8对array.sort和typedarray.sort进行了重写,理由是更好的性能。用的是一个叫做torque的语言,貌似是V8自己基于c++开发的一个DSL
这是array.sort重写的commit,可以看出实现还是跟原来一样。性能提升源于C++本身的性能优势。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
楼上的大佬解释了“
sort
中是如何执行的”,我来回答一下“js随机排序一个数组”吧。题主的方法是错的,(至少在Chrome中)几乎所有元素都会留在自己本来的位置!
https://jsfiddle.net/rcmp0aLL/
而实际上,题主的方法到底能不能打乱数组是依赖于
sort
的具体实现的。Chrome的具体实现请见楼上大佬,不论如何,结果是不行的。正确的姿势是什么呢?
用lodash的
_.shuffle
,简单,快速,直接,易维护。或者,实现一个Fisher-Yates算法:
以上fiddle和代码取自StackOverflow https://stackoverflow.com/que...