将单个值与数组进行比较

时间:2014-07-12 08:47:35

标签: javascript arrays loops

我试图将随机值与数组元素进行比较。逻辑是重新加载值,如果该特定值已存在于数组中,以便创建包含所有唯一元素的数组。这是为用户数组和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);

谢谢

3 个答案:

答案 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"]

希望它有用。