这个入境检查有什么不对吗?

时间:2013-12-09 00:36:30

标签: javascript

我的逻辑可能有什么问题? 如果我选中(this.holdExists(x,y) != false),如果我选中(this.holdExists(x,y) == true),则会在任何情况下添加条目,或者根本不添加条目。

    //check if the hold with coordinates x,y already exists
    holdExists: function(x,y) {
        var precision = 0.01;
        holds.forEach(function(obj) {

            if ( (Math.abs(x - obj.x) < precision)
            || (Math.abs(y - obj.y) < precision) ) {
                console.log('Already exists!');
                return true
            } 
            return false
        });
    },

    // add hold by coordinates only
    addCoordHold: function(x,y) {
        if (this.holdExists(x,y) == true) {
            var h = Hold(x,y);
            holds.push(h);
            console.log('added\n', x,y);
        } else {
            console.log('A hold already exists!');
        }
    },

1 个答案:

答案 0 :(得分:2)

您将从传递给forEach的迭代器函数返回值,但forEach并不关心这些返回值,它们与{{1}的返回值无关函数,你已经定义它总是holdExists

你可能意味着:

undefined

这有两件事:

  1. 它声明了一个变量holdExists: function(x,y) { var precision = 0.01; var rv = false; holds.some(function(obj) { if ( (Math.abs(x - obj.x) < precision) || (Math.abs(y - obj.y) < precision) ) { console.log('Already exists!'); rv = true; return true; } }); return rv; }, ,用作rv函数的返回值。

  2. 它从holdExists切换到forEach,这样您就可以提前结束迭代(some将始终遍历所有元素。)

    < / LI>
  3. 如果找到匹配项,则会将forEach设置为rv

  4. 如果找到匹配项,则会停止true循环。

  5. 它设置some函数的返回值。