网上查到一个方法(这个方法效率不高,不贴出代码了):
基本思路:随机读取数组1中的一个数据,将其与数组2中的数据进行比较,如果存在,就另读取,直到读到新数据存到数组2中,当数组2的长度等于数组1的长度时,停止读取数据,输出数组2。
变化:因为数据有可能有重复,所以再使用一个数据来存储数组2中的数据序号,检验数据是否读取过时,改成比较数据序号。
于是按自己想法写了,加上多次改进(勉强达要求):
- JScript code
function ran_Arr_2(oArr) { var arrNum = []; var tArr = [];//新数组 var random_x; for(var i=oArr.length;i>0;i--) { random_x = Math.floor(Math.random()*i); // 取得一个随机数 arrNum.push(random_x);//压进位置 for(var j=0;j<arrNum.length-1;j++) { if( random_x >= arrNum[j]) random_x++; } tArr.push(oArr[random_x]); //压进数组 } return tArr; //返回新数组 } function ran_Arr_3(oArr) { var oArr_copy = oArr.slice(0);//复制原数组 var tArr = [];//新数组 var random_x; for(var i=oArr.length;i>0;i--) { random_x = Math.floor(Math.random()*i); // 取得一个随机数 tArr.push(oArr_copy[random_x]); //压进数组 oArr_copy[random_x] = oArr_copy[i-1]; } return tArr; //返回新数组 } function ran_Arr_4(oArr) { var temp_x; //临时交换数 var tArr = oArr.slice(0);//新数组,复制原数组 var random_x; for(var i=oArr.length;i>0;i--) { random_x = Math.floor(Math.random()*i); // 取得一个随机数 temp_x = tArr[random_x]; tArr[random_x] = tArr[i-1]; tArr[i-1] = temp_x; } return tArr; //返回新数组 }
现求更有效率的代码:
------解决方案--------------------
看不明白
“ 基本思路:随机读取数组1中的一个数据,将其与数组2中的数据进行比较,如果存在,就另读取,直到读到新数据存到数组2中,当数组2的长度等于数组1的长度时,停止读取数据,输出数组2。 ”
数组1和2没有限定条件?比如长度?如果2大于永远也不会有结果................
------解决方案--------------------
帮顶
------解决方案--------------------
- JScript code
var a = [1, 2, 3, 4, 5, 6,7]; var b = [2, 6,10]; var isok = true; while (true) { isok = true; var lena = a.length; var lenb = b.length; if (lenb >= lena) { break; } var rand = Math.round(Math.random() * (lena-1)); for (var i = 0; i < lenb; i++) { if (b[i] == a[rand]) { isok = false; break; } } if (isok == true) { b.push(a[rand]); } } document.getElementById("div1").innerHTML =b.valueOf();
------解决方案--------------------
路过
------解决方案--------------------
基本思路:随机读取数组1中的一个数据,将其与数组2中的数据进行比较,如果存在,就另读取,直到读到新数据存到数组2中,当数组2的长度等于数组1的长度时,停止读取数据,输出数组2。
给我的感觉你的意思就是比较两个数组arr1,arr2,如果arr2中没有arr1的数据,就是当前arr1的数据写入arr2中,并且arr2的长度不能大于arr1的长度,并没有存在排序的问题?!
- JScript code
var arr1 = [1,2,3,5,6,8,9]; var arr2 = [4,6]; function addSome(arr1,arr2){ if(arr1==null||arr1.length==0) return []; if(arr2==null||arr2.length==0) return arr1; var length = arr2.length; var obj = new Object(); for(var i=0; i<length; i++){ eval("obj.pop" + arr2[i] + "='" + arr2[i] + "';"); } var l = arr1.length; for(var i=0;i<l;i++) { if(eval("typeof obj.pop" + arr1[i] + "=='undefined'")){ arr2.push(arr1[i]); } if(arr2.length==l){ break; } } return arr2.sort(); //如果要排序的话,再加上sort } var t = addSome(arr1,arr2); alert(t);
------解决方案--------------------