【问题标题】:javascript IF nested in a FOR loop not filtering resultsjavascript IF嵌套在FOR循环中不过滤结果
【发布时间】:2011-07-22 22:50:41
【问题描述】:

我有一个 for 循环,用于将数组中的内容绘制到画布上。该数组包含一堆变量。

这些变量包含定性值,例如firstNamelastNameteam 等。

我知道变量设置正确,因为我使用它们的其他函数工作正常。但是,我有一个 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/

【问题讨论】:

    标签: javascript canvas if-statement for-loop


    【解决方案1】:

    问题在于= 设置了一个变量...使用allSeating[i.team]===g

    您正在为allSeating 中的每个元素将g 分配给allSeating[i.team]= 运算符在 JavaScript 中的作用与在 VB 或 SQL 中的作用不同——在这两种语言中,x = y 是等效测试或赋值,具体取决于上下文。在 JavaScript(以及我能想到的大多数其他语言)中,= 仅用于赋值,==(和 JavaScript 中的 ===)用于测试相等性。

    == 会进行类型转换以检查相等性,而=== 则不会。 ("1" == 1 // true"1" === 1 // false

    【讨论】:

    • And == 检查强制值,而 === 检查类型和值
    • @Anthony ... 非常正确。我也将其添加到我的答案中。
    • @Sean 我有同样的想法并尝试了===== 都完全打破了它=\
    • @tehaaron -- 您的代码还有更多问题 -- i 是一个整数,它可能没有 .team 属性。这意味着您不断将allSeating 数组中的undefined 键设置为g 的值,然后渲染团队成员)。将allSeating[i.team]===g 更改为allSeating[i]===g 看看会发生什么。
    • @Sean 我试过了,但没有任何改变。如果这就是原因,为什么只使用= 会产生任何结果?通过警报,它会显示正确的团队颜色和所有内容。
    【解决方案2】:

    allSeating[i.team]=g 不是检查:它是一个赋值语句。

    allSeating[i.team]==g 呢? (我错过了什么吗?)

    Mozilla Developer's Network JavaScript Documentation 是这类事情的绝佳资源。

    更新:

    正如其他地方所说,这里的内容比 ==== 更多。

    我们在聊天中注意到allSeating[i].team === g 可能是您想要评估的,但事情仍然没有加起来。

    我认为seat 对象是问题所在,或者更确切地说是它的实例化。

    定义有八个属性,但你的实例化只有七个

    fillStyle 属性添加一个值,如下所示,为我解决了问题,allSeating[i].team === g 现在评估为真。

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

    如果您还有其他问题,请告诉我。

    【讨论】:

    • 你是我的英雄。当我在那里有我的初始测试用户时,我确实定义了 fillStyles,但是当我加载真实用户时,我忘记了添加它。我非常感谢你花时间调查这个问题。对此,我真的非常感激。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多