Переменная Javascript остается неопределенной - PullRequest
0 голосов
/ 01 января 2012

У меня проблема с этим скриптом, что-то идет не так. 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 ....

Я просто хочу, может быть, я в первый раз неправильно спросил, записать все случайные числа из случайного списка чисел Затем мне нужно разделить это на 7 и вернуть это.

EDIT

Почти все проблемы понятны, всем спасибо за это. Остался еще один вопрос: В этом коде ниже он берет только первое неравное значение из остатка, и я хочу, чтобы он принимал все значения, которые являются неравномерными, до следующего оператора 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 ]

2 голосов
/ 01 января 2012

Вам не нужно передавать 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 .

Отредактировано в ответ на вопрос от OP (в комментариях к question , выше):

... может кто-нибудь объяснить, что это значит:var remainder = [];

Конечно, это буквенно-массивная нотация, равная: var remainder = new Array();, это просто немного лаконичнее, и я предпочитаю сэкономить на наборе текста.У меня создается впечатление от JS Lint всякий раз, когда я использую var x = new Array();, в котором указанная выше версия, как правило, предпочтительнее (поскольку она жалуется на иное), но я не знаю почему.

1 голос
/ 01 января 2012

Либо передайте Rnumber в функцию unevenAndDivisible, либо пропустите его из списка аргументов.Поскольку это аргумент, он имеет более локальную область видимости, чем первоначальное объявление Rnumber.

0 голосов
/ 01 января 2012
var array = [],
    i = 100;

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

alert(array);
0 голосов
/ 01 января 2012

Ваша проблема в линии

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()
0 голосов
/ 01 января 2012

1 - вы не определяете значение Rnumber, которое является аргументом функции.2 - в цикле вы определяете остаток от деленного значения рангума и не сохраняете в массиве;попробуйте:

изменить:

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

на

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