当前位置: 首页 > 编程笔记 >

JavaScript中实现最高效的数组乱序方法

程淮晨
2023-03-14
本文向大家介绍JavaScript中实现最高效的数组乱序方法,包括了JavaScript中实现最高效的数组乱序方法的使用技巧和注意事项,需要的朋友参考一下

数组乱序的意思是,把数组内的所有元素排列顺序打乱。

常用的办法是给数组原生的sort方法传入一个函数,此函数随机返回1或-1,达到随机排列数组元素的目的。


arr.sort(function(a,b){ return Math.random()>.5 ? -1 : 1;});

这种方法虽直观,但效率并不高,经我测试,打乱10000个元素的数组,所用时间大概在35ms上下(firefox)

本人一直具有打破沙锅问到底的优良品质,于是搜索到了一个高效的方法。原文见此


if (!Array.prototype.shuffle) {

    Array.prototype.shuffle = function() {

        for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j] = x);

        return this;

    };

}

arr.shuffle();

此方法是为Array.prototype添加了一个函数,叫shuffle——不过叫什么名字不重要啦,重要的是他的效率。

拿我上面那个10000个元素的数组来测试,用这个方法乱序完成仅需要7,8毫秒的时间。

把数组元素增加10倍到100000来测试,第一种sort方法费时500+ms左右,shuffle方法费时40ms左右,差别是大大的。

完整测试代码:


var count = 100000,arr = [];

for(var i=0;i.5 ? -1 : 1;});

Array.prototype.sort.call(arr,function(a,b){ return Math.random()>.5 ? -1 : 1;});

document.write(arr+'

');

var t1 = new Date().getTime();

document.write(t1-t);

//以下方法效率最高 if (!Array.prototype.shuffle) {     Array.prototype.shuffle = function() {         for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j] = x);         return this;     }; } var t = new Date().getTime(); arr.shuffle(); document.write(' '+arr+' '); var t1 = new Date().getTime(); document.write(t1-t);

另外,大家有没有注意到shuffle代码里的for循环,他没有后半截!也就是只有for(..)却没有后面的{..},居然可以这样写!而且居然正常执行!好奇特,我得去博客园问问。

 类似资料:
  • 本文向大家介绍JavaScript中实现PHP的打乱数组函数shuffle实例,包括了JavaScript中实现PHP的打乱数组函数shuffle实例的使用技巧和注意事项,需要的朋友参考一下 PHP 里面有个非常方便的打乱数组的函数 shuffle() ,这个功能在许多情况下都会用到,但 javascript 的数组却没有这个方法,没有不要紧,可以扩展一个,自己动手,丰衣足食嘛。 请刷新页面查看随

  • 本文向大家介绍JavaScript实现数字数组正序排列的方法,包括了JavaScript实现数字数组正序排列的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript实现数字数组正序排列的方法。分享给大家供大家参考。具体如下: JS数组的sort方法支持一个函数作为参数,下面的代码演示了JS数组如何实现数字的正序排列 上面的代码输出结果如下 1,5,10,25,40,100

  • 问题内容: 在数组中对对象进行分组的最有效方法是什么? 例如,给定此对象数组: 我正在表格中显示此信息。我想对不同的方法进行分组,但是我想对这些值求和。 我将Underscore.js用于其groupby函数,这很有用,但并不能解决所有问题,因为我不希望它们“分裂”而是“合并”,更像SQL 方法。 我正在寻找的是能够总计特定值(如果要求)。 因此,如果我进行了groupby ,我希望收到: 如果我

  • 本文向大家介绍JavaScript实现列出数组中最长的连续数,包括了JavaScript实现列出数组中最长的连续数的使用技巧和注意事项,需要的朋友参考一下 原始题目: 给定一个无序的整数序列, 找最长的连续数字序列。 例如: 给定[100, 4, 200, 1, 3, 2], 最长的连续数字序列是[1, 2, 3, 4]。 小菜给出的解法:   调用说明:      方法名称:         

  • 本文向大家介绍JavaScript实现数字数组按照倒序排列的方法,包括了JavaScript实现数字数组按照倒序排列的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript实现数字数组按照倒序排列的方法。分享给大家供大家参考。具体如下: 下面的代码演示了JS数组如何通过sort对数字类型的数组进行倒序排序 上面的代码输出结果如下 100,40,25,10,5,1 希望本文

  • randomArray(array) 该函数可以打乱一维数组元素的顺序,这是随机过程 array <Array> 一维数组 export default{ data() { return { array: [1,2,3,4,5] } }, onLoad() { console.log(this.$u.randomArray(this.array)); } }