如果数组中不存在,则返回值

时间:2013-09-18 15:25:23

标签: javascript jquery arrays return

如果未在我的数组中定义,我需要此代码返回不同的值(从0到14)。我不明白为什么它告诉我“n”没有定义。请帮忙

编辑 * **

我修正了n值,但我仍然得到数组中包含的数字!!

编辑2 * ** * ***

我需要我的代码返回一个未包含在我的数组中的数值(随机)。这是我正在做的简化版本,完整版本具有非连续值和大量数字!!

function test () {
   var arr= [1,2,3,4,5,6,7,8,9];
   var n = Math.floor((Math.random() * 15));
   var tex = $.inArray( n, arr );
   if (tex == -1) {
       return n;
   }
   else {
       var n = Math.floor((Math.random() * 15));
   }
  alert (n);
}

6 个答案:

答案 0 :(得分:4)

function test () {
   var arr= [1,2,3,4,5,6,7,8,9];
   var n = Math.floor((Math.random() * 15));
   var tex = $.inArray( n, arr );
   if (tex == -1) {
       return n;
   }
   else {
       n = Math.floor((Math.random() * 15)); //no need of declaring n again
   }
   alert (n);//alert should be here inside the function 
}

n在函数测试

中定义

所以var n范围仅在函数内部,即n在函数测试之外无法访问

代码alert (n);中的

仅在条件失败时才起作用。如果条件变为真,则returns n控件将不在函数内,即函数内部不再执行代码

阅读 - > What is the scope of variables in JavaScript?

OP发表评论后更新

DEMO

function test() {
    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    var n = Math.floor((Math.random() * 15));
    var tex;
    while ((tex = $.inArray(n, arr)) != -1) {
        n = Math.floor((Math.random() * 15));
    }
    return n;
}
alert(test());

答案 1 :(得分:1)

除了在函数结束时变量超出范围这一事实,正如其他人提到的那样,你的函数没有按照你说的那样去做。如果它生成的第一个数字在数组中,它只会再次尝试生成一个随机数,然后使用该数字而不管它是否在数组中。你需要某种循环来继续尝试新的随机数,直到找到一个肯定不在数组中的随机数。

答案 2 :(得分:0)

n是其定义的函数的本地,在函数外部定义n以在函数外部使用它。

答案 3 :(得分:0)

您的n变量是在函数范围内定义的,因此无法从全局范围访问。

要从函数返回值,请使用以下语法:

return n;

那么你可以在全球范围内做这样的事情:

alert(function(args));

答案 4 :(得分:0)

首先,您提到要返回一个值:  你为什么把它变成全球性的?

试试这个:

 function test () {
       var arr= [1,2,3,4,5,6,7,8,9];
       n = Math.floor((Math.random() * 15));
       var tex = $.inArray( n, arr );
       if (tex == -1) {
           return n;
       }
       else {
          n = Math.floor((Math.random() * 15));
       }
return n
    }

答案 5 :(得分:0)

function test() {
    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    var n = Math.floor((Math.random() * 15));
    var tex = $.inArray(n, arr);
    if (tex == -1) {
        return n;
    } else {
        test();
    }
}