Javascript变量保持未定义

时间:2012-01-01 15:17:49

标签: javascript division

我对这个脚本有问题,出了点问题。 Rnumer保持未定义。此脚本应返回并写入随机数列表中的所有不均匀数字。谁能告诉我我做错了什么。提前致谢

var Rnumber = new Array();

for (i = 0; i<= 100;i++)
{
    Rnumber[i] = Math.ceil(Math.random()*101);
//  document.write(Rnumber[i] + "<br/>");
}

function unevenAndDivisible(Rnumber)
{
    var remainder = new Array();    

    for (i = 0; i<= 100; i++)
    {
        remainder = parseInt(Rnumber[i])%2;
    }
    return remainder;
}

document.write(unevenAndDivisible());

已更改为

var Rnumber = new Array();

for (i = 0; i<= 100;i++)
{
    Rnumber[i] = Math.ceil(Math.random()*101);
//  document.write(Rnumber[i] + "<br/>");
}

function unevenAndDivisible(Rnumber)
{
    var remainder = new Array();

    for (i = 0; i<= 100; i++)
    {
        remainder[i] = Rnumber[i]%2;
    }
    return remainder;
}
document.write(unevenAndDivisible(Rnumber));

但现在我得到了结果: 0,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1 ....

我只是想在第一次问我错了,从Rnumbers的随机列表中写出不均匀的数字 然后我需要将它除以7并返回。

修改

所有问题都很清楚,感谢所有人。 他们还有一个问题: 在下面的代码中,它仅从剩余部分获取第一个不均匀值,并且我希望它使得下一个if语句不均匀的所有值都检查%7。  如果你为自己运行它,也许你会看到更好的问题

var Rnumber = new Array();

for (i = 0; i<= 100;i++)
{
    Rnumber[i] = Math.ceil(Math.random()*101);
}

function unevenAndDivisible()
{
    var remainder = [];
    var answer = [];
    for (i = 0; i<= 100; i++)
    {
        if (Rnumber[i]%2 !== 0)
        {
            remainder.push(Rnumber[i]); 

            for (c = 0; c <= remainder.length;c++)
            {
                if (remainder[c]%7 == 0)
                {
                    answer.push(remainder[c]);
                }
            }           
        }
    }
    return answer;
}

answer = unevenAndDivisible();
document.write(answer);

问题解决了,谢谢大家

5 个答案:

答案 0 :(得分:2)

您无需将Rnumber传递给该函数,因为它已在范围内可用:

function unevenAndDivisible()
    {
        var remainder = [];

        for (i = 0; i<= 100; i++)
        {
            if (Rnumber[i]%2 !== 0) {
                remainder.push(Rnumber[i]);
            }

        }
        return remainder;
    }

remainder = unevenAndDivisible();
console.log(remainder);

JS Fiddle demo


已编辑以回复OP提出的问题(在上面的问题的评论中):

  

...有人可以解释这是什么意思:var remainder = [];

当然,它是数组文字表示法,它等于:var remainder = new Array();,它只是更简洁一点,我更喜欢自己保存打字。我从JS Lint获得了这样的印象,每当我在其中使用var x = new Array();时,通常首选上述版本(因为它另有抱怨),但我不知道为什么。

答案 1 :(得分:1)

将Rnumber传递给函数unevenAndDivisible或从参数列表中省略它。由于它是一个参数,因此它具有比Rnumber的初始声明更多的局部范围。

答案 2 :(得分:0)

1 - 您没有定义函数参数的Rnumber值。 2 - 在循环中,你将剩余部分定义为分配的编号值,而不是保存在数组中;尝试:

变化:

remainder = parseInt(Rnumber[i])%2;

remainder[i] = parseInt(Rnumber[i])%2;  

答案 3 :(得分:0)

你的问题就在这一行

function unevenAndDivisible(Rnumber)

你正在传递Rnumber作为参数,但是当你打电话给unevenAndDivisible()时 你没有传递它。 因此,对于函数的主体,Rnumber是未定义的(因为你没有通过任何内容)

以下代码段相当于你写的nad可能更好解释

function unevenAndDivisible(xyz)
{
    var remainder = new Array();    

    for (i = 0; i<= 100; i++)
    {
        remainder = parseInt(xyz[i])%2;
    }
    return remainder;
}

然后称为

unevenAndDivisible(undefined)

修复它从调用定义中删除参数

即。将其定义为

function unevenAndDivisible()

答案 4 :(得分:0)

var array = [],
    i = 100;

while (i--) {
    var random = Math.random()*i|0;
    if(random % 2)
       array.unshift(random);
}

alert(array);