我试图将随机值与数组元素进行比较。逻辑是重新加载值,如果该特定值已存在于数组中,以便创建包含所有唯一元素的数组。这是为用户数组和comp数组完成的。
一旦验证了一个唯一元素,就会将其推送到数组并再重复20次。
我的模拟器说可能会有太多的处理。这是我的代码
var user_arr=new Array();
var comp_arr=new Array();
function getData()
{
for(var i=1;i<=20;i++)
{
repeat_user_value();
function repeat_user_value()
{
var userran=parseInt((Math.random() * (123 - 0+ 1)), 10) + 0;
for(var j=0;j<20;j++)
{
if(userran==user_arr[j])
{
repeat_user_value();
}
}
}
user_arr.push(userran);
repeat_comp_value();
function repeat_comp_value()
{
var compran=parseInt((Math.random() * (123 - 0+ 1)), 10) + 0;
for(var j=0;j<20;j++)
{
if(compran==comp_arr[j])
{
repeat_comp_value();
}
}
}
comp_arr.push(compran);
}
localStorage['userCards']=JSON.stringify(user_arr);
localStorage['compCards']=JSON.stringify(comp_arr);
window.location = 'file:///android_asset/www/game.html'; // PSEUDO LOAD USER CARD
}
代码在没有比较的情况下工作。 这是
var userran=parseInt((Math.random() * (123 - 0+ 1)), 10) + 0;
user_arr.push(userran);
var compran=parseInt((Math.random() * (123 - 0+ 1)), 10) + 0;
comp_arr.push(compran);
谢谢
答案 0 :(得分:1)
欢迎@Rustie!看看这是否符合您的需求:jsfiddle demo
此代码用于初始化具有唯一值的数组:
var user_arr = new Array();
for (var i=0; i<20; i++) {
user_arr[i] = get_unique_value(user_arr);
}
// returns a value that does not exist in the "array"
function get_unique_value(array) {
var userran = parseInt((Math.random() * (123 - 0 + 1)), 10) + 0;
while (alreadyExists(array, userran)) {
userran = parseInt((Math.random() * (123 - 0 + 1)), 10) + 0;
}
return userran;
}
//checks if "number" exists in "array" and returns true or false
function alreadyExists(array, number) {
for (var i=0; i<array.length; i++) {
if (array[i]==number) {
return true;
}
}
}
alert(user_arr);
答案 1 :(得分:1)
有几个问题:
repeat_comp_value()
内拨打repeat_comp_Value()
。因此,您可以多次递归调用它,每次调用都会分配资源。array.indexOf()
代替for循环进行比较。 看一下这个片段:
// Filling user_array
user_array = [];
while (user_array.length < 20) {
var userran=parseInt((Math.random() * (123 - 0+ 1)), 10) + 0;
if (user_array.indexOf(userran) < 0) {
user_array.push(userran);
}
}
将其中两个放在后面,一个用于user_array,一个用于comp_array,它已完成。或者,更好的是,将它包装在一个函数中并调用该函数两次。
祝你好运: - )答案 2 :(得分:0)
使用对象来表示集合更简单。
亲眼看看:
var user_arr, comparr,
getData = function (obj) {
var keys = Object.keys,
tmp = parseInt(Math.random() * 24); // replace as needed.
while (keys(obj).length <= 20) {
if (!obj.hasOwnProperty(tmp)) {
obj[tmp] = 0; // RHS not important.
}
tmp = parseInt(Math.random() * 24); // replace as before.
}
return keys((obj));
};
user_arr = getData({});
comp_arr = getData({});
这是输出(在Chromium上):
user_arr
["0", "1", "2", "4", "5", "6", "7", "8", "10", "11", "13", "14", "15",\
"16", "17", "18", "19", "20", "21", "22", "23"]
comp_arr
["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", \
"13", "14", "15", "16", "17", "18", "19", "21"]
希望它有用。