JS设置数组随机取值,支持多个不重复【实例】
XML/HTML代码
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>无标题文档</title>
- </head>
- <body Arrdata="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33">
- </body>
- <script type="text/javascript" src="http://code.liuxinxiu.com/lib/zepto/zepto-1.1.6.js"></script>
- <script language="javascript">
- //从一个给定的数组arr中,随机返回num个不重复项
- function getArrayItems(arr, num) {
- //新建一个数组,将传入的数组复制过来,用于运算,而不要直接操作传入的数组;
- var temp_array = new Array();
- for (var index in arr) {
- temp_array.push(arr[index]);
- }
- //取出的数值项,保存在此数组
- var return_array = new Array();
- for (var i = 0; i<num; i++) {
- //判断如果数组还有可以取出的元素,以防下标越界
- if (temp_array.length>0) {
- //在数组中产生一个随机索引
- var arrIndex = Math.floor(Math.random()*temp_array.length);
- //将此随机索引的对应的数组元素值复制出来
- return_array[i] = temp_array[arrIndex];
- //然后删掉此索引的数组元素,这时候temp_array变为新的数组
- temp_array.splice(arrIndex, 1);
- } else {
- //数组中数据项取完后,退出循环,比如数组本来只有10项,但要求取出20项.
- break;
- }
- }
- return return_array;
- }
- //测试
- var ArrData=$("body").attr("Arrdata");
- //var ArrList=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33];
- var data=ArrData.split(",");//已经是数组,直接可以用str[0]去取了
- //alert(str[1])
- //alert(getArrayItems(arr,2));
- var html=getArrayItems(data,2);
- for(var i=0;i<html.length;i++){
- alert(html[i])
- }
- document.write(html)
- </script>
- </html>