MENU
- 示例一
- 示例二
- sort
- splice
- push
- random
- floor
- Math
- while
- 演示
示例一
let reorganize = function (arr){let rest = [];while (arr.length > 0) {let random = Math.floor(Math.random() * arr.length);// 把获取到的值放到新定义的数组中rest.push(arr[random]);// 这句代码的作用是改变获取随机数的最大值,// 防止获取到数组长度之外的随机数// 同时也是限制了重复获取// 删除原数组中已经获取到的数值arr.splice(random, 1);}return rest;
};console.log(reorganize([1, 2, 3, 5, 6, 8, 4, 9, 7]));
示例二
let shuffleArray = (arr) => arr.sort(() => Math.random() - 0.5),arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],arr2 = [{id: 1,name: '张三'},{id: 2,name: '李四'},{id: 3,name: '王五'},{id: 4,name: '赵六'},{id: 5,name: '半晨'}];console.log(shuffleArray(arr1));
console.log(shuffleArray(arr2));
sort
w3school
sort()方法对数组的项目进行排序。
排序顺序可以是按字母或数字,也可以是升序(向上)或降序(向下)。
默认情况下,sort()方法将按字母和升序将值作为字符串进行排序。
这适用于字符串(Apple出现在Banana之前)。但是,如果数字按字符串排序,则25大于100,因为2大于1。
正因为如此,sort() 方法在对数字进行排序时会产生不正确的结果。
您可以通过提供“比较函数”来解决此问题。
sort()方法会改变原始数组。
MDN
sort()方法就地对数组的元素进行排序,并返回对相同数组的引用。默认排序是将元素转换为字符串,然后按照它们的UTF-16码元值升序排序。
由于它取决于具体实现,因此无法保证排序的时间和空间复杂度。
如果想要不改变原数组的排序方法,可以使用toSorted()。
splice
MDN
splice()方法通过移除或者替换已存在的元素和/或添加新元素就地改变一个数组的内容。
要创建一个删除和/或替换部分内容而不改变原数组的新数组,请使用toSpliced()。要访问数组的一部分而不修改它,参见slice()。
w3school
splice()方法向/从数组添加/删除项目,并返回删除的项目。
splice()方法会改变原始数组。
push
MDN
push方法将指定的元素添加到数组的末尾,并返回新的数组长度。
w3school
push方法向数组末尾添加新项目,并返回新长度。
新的项目将被添加到数组的末尾。
push方法会改变数组的长度。
如需在数组的开头添加项目,请使用unshift方法。
random
MDN
Math.random()函数返回一个浮点数,伪随机数在范围从0到小于1,也就是说,从0(包括0)往上,但是不包括1(排除1),然后您可以缩放到所需的范围。实现将初始种子选择到随机数生成算法;它不能被用户选择或重置。
w3school
random()方法返回从0(含)到1(不含)的随机数。
floor
MDN
Math.floor()函数总是返回小于等于一个给定数字的最大整数。
w3school
floor()方法将数字向下舍入为最接近的整数,并返回结果。
如果传递的参数是整数,则不会舍入该值。
floor()方法执行的是向下取整计算,它返回的是小于或等于函数参数,并且与之最接近的整数。
Math
MDN
Math是一个内置对象,它拥有一些数学常数属性和数学函数方法。Math不是一个函数对象。
Math用于Number类型。它不支持BigInt。
与其他全局对象不同的是,Math不是一个构造器。Math的所有属性与方法都是静态的。引用圆周率的写法是Math.PI,调用正余弦函数的写法是Math.sin(x),x是要传入的参数。Math的常量是使用JavaScript中的全精度浮点数来定义的。
w3school
Math对象允许执行数学任务。
Math不是构造函数。Math的所有属性/方法都可以通过使用Math作为对象来调用,而无需创建它。
while
w3school
while循环会一直循环代码块,只要指定的条件为true。
MDN
while语句可以在某个条件表达式为真的前提下,循环执行指定的一段代码,直到那个表达式不为真时结束循环。
