JavaScript, если вложенный в цикл FOR не фильтрует результаты - PullRequest
0 голосов
/ 23 июля 2011

У меня есть цикл for, который я использую для рисования материала из массива на холст.Массив содержит множество переменных.

Эти переменные содержат качественные значения, такие как firstName, lastName, team и т. Д.

Я знаю, что переменные установлены правильно, потому что моидругие функции, использующие их, работают нормально.Тем не менее, у меня есть цикл for, который предполагает рисовать круги на холсте, только если team = 'blue'.

Проблема в том, что он распознает их всех как «синих» и рисует их всех, хотя на самом деле лишь немногие из них «синие», а другие «красные», «зеленые» и т. Д.

вот код:

            ctx.fillGroups = function(g){
                for ( var i=0; i<allSeating.length; ++i ){
                    if (allSeating[i.team]=g){
                        ctx.beginPath();
                        ctx.fillPerson(allSeating[i]);
                        //alert(allSeating[i.team]);
                    }
                }
            }

С активным alert() я могу видеть, что он думает, что они все синие.

Я предполагаю, что проблема заключается в линии: if (allSeating[i.team]=g) но я не могу заставить его работать.Нужно ли проводить проверку на allSeating[i.team]=g в другом месте?Но тогда почему он думает, что они все blue команда в любом случае?

ОБНОВЛЕНИЕ: все еще не работает здесь демо http://jsfiddle.net/8ryvH/1/

Ответы [ 2 ]

4 голосов
/ 23 июля 2011

Проблема заключается в том, что = устанавливает переменную ... используйте allSeating[i.team]===g

В результате вы назначаете g для allSeating[i.team] для каждого элемента в allSeating.Оператор = не делает в JavaScript то же самое, что и в VB или SQL - в любом из этих языков x = y является проверкой эквивалентности или присваиванием, в зависимости от контекста.В JavaScript (и большинстве других языков, о которых я могу думать), = используется только для присваивания, а ===== в JavaScript) используется для проверки на равенство.

==выполняет приведение типов для проверки равенства, а === - нет.("1" == 1 // true но "1" === 1 // false)

3 голосов
/ 23 июля 2011

allSeating[i.team]=g - это не проверка: это оператор присваивания.

А что вместо allSeating[i.team]==g?(Я что-то упускаю?)

Сетевая документация JavaScript разработчика Mozilla - отличный ресурс для такого рода вещей.

Обновление:

Как уже было сказано, здесь есть нечто большее, чем = или ===.

Мы отметили в чате, что allSeating[i].team === g - это, вероятно, то, что вы хотите оценить, но вещи по-прежнему не добавляютсяup.

Я думаю, что проблема заключается в seat объекте, точнее, в его реализации.

Определение имеет восемь свойств, но ваши экземпляры имеют только seven .

Добавление значения для свойства fillStyle, как показано ниже, исправило проблему для меня, и allSeating[i].team === g теперь оценивает true.

var markTwain = new Seat(758, 180, 9, fillStyle , "Mark", "Twain", 6207, "red");

Пожалуйста, дайте мне знать, если у вас возникнут какие-либо проблемы.

...