最近写小程序项目时候,需要写一个今日推荐模块:从一系列推荐的列表中,随机抽取3条作为今日推荐。
下面展示用纯前端处理:
从数组 arr 中,随机取出几个数,组成新的数组 newArr
/**
* @params arr 传入的源数组
* @params length 需要获取的元素的个数
*/
function myRandom(arr, length){
var newArr = []; // 组成的新数组初始化
for(var i = 0; i < length; i++){
var index = Math.floor(Math.random()*arr.length);
var item = arr[index];
newArr.push(item)
arr.splice(index, 1)
}
return newArr.reverse()
}
myRandom([1,2,3,4,5,6], 3)
解析:
var newArr = [];声明并定义了一个新的数组,用来存放最后结果的值;for循环里面,循环的次数,表示从数组中取值的个数;比如要从数组中取3个,则循环3次.var index = Math.floor(Math.random()*arr.length);每次执行for循环后,获取的随机索引;var item = arr[index];获取的随机数组项newArr.push(item),将获取的随机项,追加到之前定义的新数组中;arr.splice(index, 1),注意:每次追加完之后,需要将此值从源数组中排除 (防止后面随机获取的时候,获取到重复的值)- 循环上面的操作。(注意:每一次循环之后,数组的长度都减1)
- 最后返回新数组的值;